web-dev-qa-db-ja.com

意図的に写真を撮った後にアクティビティが強制終了/ onCreateが呼び出されました

インテントを使って写真を撮ろうとしています。私の問題は、写真を撮った後、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が呼び出され、新しいイメージが失われる場合があります。

ヘルプは大歓迎です。

33
Cattivo

実際、カメラはアクティビティの向きを変更します。そのため、アクティビティは破棄されて再作成されます。

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

<activity
    Android:name=".YourActivity"
    Android:configChanges="orientation|keyboardHidden|screenSize"
    Android:screenOrientation="portrait" >
</activity>
108
Akram

Galaxy S3のように、画像をインポートするときにアクティビティを破壊する電話があるようです。私のアプリがポートレートモードの場合、画像がランドスケープモードであるために発生すると言われています。したがって、マニフェストファイルのconfigChangesに関連するすべての提案は、この状況に適用できるわけではありません。

私がやったことは、アクティビティのonDestroyと戦う代わりに(onCreate()の後にフラグメントのonActivityResult()が呼び出されない原因となった)、アクティビティ自体にもonActivityResult()を実装することでしたが、そこで取得できました画像パス。次に、フラグメントが作成されたら、さらに処理するために、そのパスをフラグメントに渡しました。もちろん、アプリが再作成されたら、その画像を処理するために呼び出し元のfragmnetに戻る必要があることをアプリに伝える必要がありました。

1
Zvi

アクティビティ/アプリケーションの方向を修正します。これは、アクティビティをback/finish()すると同時に方向を変更すると、アクティビティが更新され、自動的に再開されるためです。

1

「アクティビティを保持しない」開発者設定を無効にします。そうでなければ、それはあなたが残している活動を破壊します。

0
phnmnn