28

私はインテントを使用して画像を撮影しようとしています。私の問題は、startActivityForResultを呼び出すアクティビティが破壊されているように見えることがあるため、onCreateが再び呼び出されることがあります。インテントで画像を撮影した後、アクティビティが終了/作成されました。

if (!getPackageManager().hasSystemFeature(
       PackageManager.FEATURE_CAMERA)) { 
      Util.makeLongToast(R.string.lang_no_camera); 
     } else { 
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(intent, TAKE_ITEM_PHOTO); 
     } 

...

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.v(TAG, "onactivityresult called"); 
    if (requestCode == TAKE_ITEM_PHOTO) { 
     if (data != null) { 

      imageUri = data.getData(); 


       try { 
        img_photo.setImageBitmap(Media.getBitmap(
          getContentResolver(), imageUri)); 
      } catch (FileNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

     } else 
      Log.w(TAG, "data is null"); 
    } 
} 

だから私がしようと、すべての写真を撮ると交換することである。ここでは

は、画像を交換する必要がありますImageViewのをクリックした後、写真を撮るために私のコードですそれを使った画像の画像。しかし、onActivityResultが呼び出され、新しいイメージが失われた後にonCreateが呼び出されることがあります。

お願いします。

+1

[Android:Camera Intentを呼んだ後に破壊されたアクティビティ](http:// stackoverflow.com/questions/16014930/android-activity-getting-destroyed-after-calling-camera-intent) –

答えて

102

実際に、カメラはあなたのアクティビティの方向変更を引き起こします。そのため、あなたのアクティビティは破壊され再作成されています。

これをマニフェストファイルに追加すると、方向変更が防止され、アクティビティが破壊されずに再作成されることはありません。

<activity 
    android:name=".YourActivity" 
    android:configChanges="orientation|keyboardHidden|screenSize" 
    android:screenOrientation="portrait" > 
</activity> 
+2

ありがとうございました! android:configChanges = "orientation | keyboardHidden"は行がありませんでした! ;) – Cattivo

+13

この回答に感謝します!私は私のモニターを抱擁しています –

+15

APIのレベル13以上では、configChangesに「screenSize」も追加する必要があります。 http://developer.android.com/guide/topics/manifest/activity-element.html –

1

アクティビティをバック/フィニッシュ()すると同時にオリエンテーションを変更してから、アクティビティをリフレッシュして自動的に再起動するため、アクティビティ/アプリケーションのオリエンテーションを修正しました。

1

ギャラクシーS3などの画像をインポートするときに、携帯電話がアクティビティを破壊するようです。私のアプリがポートレートモードになっている場合は、画像が横長モードになっているために起こると言われています。したがって、マニフェストファイル内のconfigChangesに関連するすべての提案は、この状況には適用されません。

私がやったのは、onCreate()の後に呼び出されないフラグメントのonActivityResult()を引き起こしたアクティビティのonDestroyとの戦いではなく、onActivityResult()をアクティビティ自体とその中で実装することでした画像のパスを取得できました。その後、そのパスをフラグメントに渡して、それを作成してからさらに処理します。もちろん、私はそのイメージを処理するために呼び出されたfragmnetに戻る必要があることを私のアプリケーションに伝えなければならなかった。

関連する問題