インテントを使って写真を撮ろうとしています。私の問題は、写真を撮った後、startActivityForResultを呼び出すアクティビティが破棄されて、onCreateが再度呼び出されるように見えることがあることです。
これは、imageviewをクリックした後に写真を撮るための私のコードです。どの画像を置き換える必要がありますか。
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が呼び出され、新しいイメージが失われる場合があります。
ヘルプは大歓迎です。
実際、カメラはアクティビティの向きを変更します。そのため、アクティビティは破棄されて再作成されます。
これをマニフェストファイルに追加すると、向きの変更が防止され、アクティビティが破棄されて再作成されることはありません。
<activity
Android:name=".YourActivity"
Android:configChanges="orientation|keyboardHidden|screenSize"
Android:screenOrientation="portrait" >
</activity>
Galaxy S3のように、画像をインポートするときにアクティビティを破壊する電話があるようです。私のアプリがポートレートモードの場合、画像がランドスケープモードであるために発生すると言われています。したがって、マニフェストファイルのconfigChangesに関連するすべての提案は、この状況に適用できるわけではありません。
私がやったことは、アクティビティのonDestroyと戦う代わりに(onCreate()の後にフラグメントのonActivityResult()が呼び出されない原因となった)、アクティビティ自体にもonActivityResult()を実装することでしたが、そこで取得できました画像パス。次に、フラグメントが作成されたら、さらに処理するために、そのパスをフラグメントに渡しました。もちろん、アプリが再作成されたら、その画像を処理するために呼び出し元のfragmnetに戻る必要があることをアプリに伝える必要がありました。
アクティビティ/アプリケーションの方向を修正します。これは、アクティビティをback/finish()すると同時に方向を変更すると、アクティビティが更新され、自動的に再開されるためです。
「アクティビティを保持しない」開発者設定を無効にします。そうでなければ、それはあなたが残している活動を破壊します。