2017-02-27 6 views
2

Ich arbeite an einer App, die ein Bild aufnimmt und dann zu einer neuen Aktivität wechselt. Hier ist die Funktion, die so tut:Android-Entwicklung - neue Aktivität zu schnell öffnen

public void takePhoto(View view){ 
    final int REQUEST_IMAGE_CAPTURE = 1; 

    // open camera 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    if(takePictureIntent.resolveActivity(getPackageManager()) != null) { 
     startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
    } 

    // open "Enter Info" screen 
    startActivity(new Intent(MainActivity.this, EnterInfoActivity.class)); 
} 

jedoch die „Enter Info“ Aktivität öffnet sich vor der Kamera. Ich möchte die Kamera öffnen, bevor ich die neue Aktivität starte. Drücken von "Zurück" bringt mich zur Kamera, was für mich bedeutet, dass die Kamera zwar lädt, aber der Aktivität eine höhere Priorität eingeräumt wird.

+0

startActivityForResult hat eine Callback-Funktion, also müssen Sie den nächsten Intent in den Block setzen – Krueger

Antwort

0

Ich möchte die Kamera öffnen, bevor Sie die neue Aktivität starten.

Dann rufen Sie nicht startActivity() für EnterInfoActivity, bis Sie in onActivityResult() aus der ACTION_IMAGE_CAPTURE Aktivität aufgerufen. Also warten Sie auf die Ergebnisse von ACTION_IMAGE_CAPTURE, dann starten Sie die nächste Aktivität.

+0

Das hat funktioniert! Vielen Dank –

1
private void captureImage() { 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 

    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

    // start the image capture Intent 
    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); 
} 

in onActivityResult Open Your Second Activity 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // if the result is capturing Image 
    if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) { 
     if (resultCode == RESULT_OK) { 
      // successfully captured the image 
      // display it in image view 
      previewCapturedImage(); 
     } else if (resultCode == RESULT_CANCELED) { 
      // user cancelled Image capture 
      Toast.makeText(getApplicationContext(), 
        "User cancelled image capture", Toast.LENGTH_SHORT) 
        .show(); 
     } else { 
      // failed to capture image 
      Toast.makeText(getApplicationContext(), 
        "Sorry! Failed to capture image", Toast.LENGTH_SHORT) 
        .show(); 
     } 
    } 
} 

MOEW info dies sehen, http://www.androidhive.info/2013/09/android-working-with-camera-api/

1

Wie ich sehe, Sie verwenden startActivityForResult die Photoaktivität zu beginnen, was bedeutet, dass diese neue Aktivität Sie einen Wert zurückkehren öffnen Aufruf der Methode onActivityResult.

Implementieren Sie die Methode, und überprüfen Sie, ob Sie von der Aktivität des Fotos kommen, dann öffnen Sie die nächste Aktivität.

Ihre Strömung wäre so etwas wie das sein:

  • starten photo Aktivität
  • Wenn die Photoaktivität endet, wobei das Verfahren onActivityResult wird
  • Von onActivityResult beginnen die editinfo Aktivität
genannt werden

Sie können spezifische Informationen zum Verwalten von Aktivitäten aus dieser Antwort finden: How to manage `startActivityForResult` on Android?

PD: Ich kann Code nicht testen und es gibt einige Zeit seit ich Code für Android schrieb. Wenn ich nach Hause komme und ein kleines Android-Projekt ohne Probleme beginnen kann, werde ich ein Beispiel veröffentlichen.

Verwandte Themen