1

Ich poste diese Frage nach mehreren Tagen des Kampfes mit diesem Problem. Ich habe Floating Action Button und OnClick Listener Aufrufe takePhoto() -Methode, wo ich offensichtlich ein Foto machen und speichern Sie seine Bitmap, die ich später verwenden werde, um es in der Datenbank zu speichern. Aber das ist nicht das Hauptproblem. Ich starte onActivityResult (...), um Daten von aufgenommenen Fotos zu erhalten. Wenn ich ein Foto mache und auf Speichern klicke, wird die Aktivität einfach zerstört (ich habe Log.v (...) verwendet, um zu überprüfen, ob es tatsächlich zerstört ist). Ich habe fast alles versucht, einschließlich onSaveInstanceState (...) und so weiter. Hier ist meine Android-Manifest-Datei und Teil dieses Codes.Kamera Intent zerstört Aktivität

Manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.alexparunov.collegemascots" > 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".account.SignIn" 
       android:label="@string/title_activity_login"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".account.SignUp" 
       android:label="@string/title_activity_register"/> 
    <activity 
     android:name=".profile.MainProfile" 
     android:configChanges="orientation|keyboardHidden|screenSize" 
     android:screenOrientation="portrait" 
     android:noHistory="true"/> 
</application> 

Java: private static final int REQUEST_IMAGE_CAPTURE = 1;

private void takePhoto(){ 
    if(ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){ 
     ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA},1); 
    } 
    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    if(cameraIntent.resolveActivity(getPackageManager()) != null) { 
     startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE); 
    } 
    Image finalImage = new Image(); 
    if(user != null && imageBitmap != null) { 
     finalImage.setImageOwner(user.getUsername()); 
     finalImage.setImageName(generateName()); 
     finalImage.setImage(ImageUtils.getBytesFromBitmap(imageBitmap)); 

     try { 
      ImageDatabase imageDatabase = new ImageDatabase(this); 
      imageDatabase.open(); 
      finalImage.setImageId(imageDatabase.createImage(finalImage)); 
      Log.v("TakeImage",""+finalImage.getImageId()); 
      imageDatabase.close(); 
      images.add(finalImage); 
      user.setImages(images); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if(requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) { 
     Bundle extras = data.getExtras(); 
     imageBitmap = (Bitmap) extras.get("data"); 
    } 
} 

private String generateName(){ 
    String name = user.getName()+"_"; 
    if(images != null) { 
     name += images.size() + ".png"; 
    } 
    return name; 
} 
+1

Ihr Prozess kann im Hintergrund beendet werden, insbesondere wenn eine speicherhungrige App wie eine Kamera-App im Vordergrund steht. Was ** genau ** ist dein Problem? – CommonsWare

+1

Diese Frage hat eine akzeptierte Antwort: http://stackoverflow.com/questions/10319330/ondestroy-while-waiting-for-onactivityresult "A (Ihre Aktivität) wird neu erstellt, wenn der Benutzer das nächste Mal besucht/benötigt, und zu diesem Zeitpunkt werden alle ausstehenden Ergebnisse geliefert. "Diese zweite Antwort bezieht sich auf das Speichern des" Fotopfads ": http://stackoverflow.com/questions/16014930/android-activity-getting-destroyed-after-calling- Kamera-Absicht und die Gründe, dass die Aktivität zerstört wird. –

+0

Also, Sie wollen sagen, dass, wenn ich activityForResult aufrufen, wird es aufgerufen, seine Daten zu speichern, und wenn ich die Aktivität erneut starte, wird das Ergebnis bereit sein? Wenn es so ist, funktioniert es nicht für mich, da ich überprüft habe und meine Datenbank leer ist :(Ich nahm das Foto und nach der Zerstörung begann ich wieder Aktivität, aber nichts passierte. –

Antwort

0

Ich denke, es ist die android: noHistory = "true" ... Sieht aus wie nach der Aufnahme des Fotos zurück zur vorherigen Aktivität auf dem History-Stack, aber es gibt keine Aktivität da es eingestellt ist, keine Geschichte zu halten.

0

Vergewissern Sie sich, dass die Ausrichtung hier nicht das Problem ist, in einigen Geräten ist die Kamera Landschaft standardmäßig nach onActivityResult Ihre Aktivität aufgerufen neu gestartet.

Verwandte Themen