2つのアクティビティ(A1、A2)があります。 A1はA2を呼び出し、A2からは次のようにカメラの意図を呼び出しています
launchIntent = new Intent(Android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
launchIntent.putExtra(MediaStore.EXTRA_OUTPUT,photoPath);
startActivityForResult(launchIntent,CAMERA_REQUEST);
カメラを開き、写真を撮ることができます。しかし、保存ボタン(s3のチェックボタン)をクリックすると問題が発生し、A2のonDestroyメソッドが呼び出される代わりに、私のonActivityResultが呼び出されません。 onActivityResult fnで実行するロジックはほとんどありません。
私はこれについてStackoverflowのいくつかの投稿を読んでいましたが、それから有用な出力を得ることができませんでした。2番目のActivity(A2)でこのようなマニフェストを持っています
Android:configChanges="keyboardHidden|orientation|locale"
Android:screenOrientation="portrait
注: HTC One XではonActivityResult fnが呼び出されますが、S3では2番目のActivity(A2)が破棄されます
Plzはこれについてあなたの考えを共有します。前もって感謝します
カメラを起動するには大量のメモリが必要です。したがって、メモリが少ないデバイスでは、Androidシステムはバックグラウンドで実行中のアクティビティを閉じ、onCreate()が呼び出されます。 。
解決策は、システムがアクティビティを破壊している間にフォトパスを保存してから、再び復元することです。
@Override
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
outState.putString("photopath", photopath);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
if (savedInstanceState != null) {
if (savedInstanceState.containsKey("photopath")) {
photopath = savedInstanceState.getString("photopath");
}
}
super.onRestoreInstanceState(savedInstanceState);
}
フラグメントでこれを行う場合。
@Override
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
outState.putString("photopath", photopath));
super.onSaveInstanceState(outState);
}
@Override
public void onViewStateRestored(Bundle savedInstanceState) {
// TODO Auto-generated method stub
if (savedInstanceState != null) {
if (savedInstanceState.containsKey("photopath")) {
photopath = savedInstanceState.getString("photopath");
}
}
super.onViewStateRestored(savedInstanceState);
}
「アクティビティを保持しない」開発者設定がオンになっていないことを確認してください。これにより、離れるアクティビティが破壊されます。
カメラアプリは大量のメモリを必要とし、メモリを解放するために、オペレーティングシステムはバックグラウンドアプリを殺す必要があります。これはすべてのAndroidアプリ。カメラアプリが戻ったときにアクティビティが再作成されます。アクティビティの状態情報を保持するには、onSaveInstanceState()
をオーバーライドしてデータを保存し、 onCreate()
。
私のアクティビティには、カメラインテントを呼び出すときに実行される多くのタスクがあります。GPSロケーションリスナーと、さらに多くのタスクがあります。
カメラインテントから戻ったときに、画像が撮影された場所の地図にマーカーを追加する必要があります。したがって、ユーザーが複数の写真を撮影した場合は、各写真にマーカーを表示する必要があります。
Camera Intentを呼び出すたびにアクティビティが破壊される場合、マーカーとその場所に関する以前のすべての情報が失われます。また、マップを再度初期化する必要があります。それは私のアプリにとって大きな問題です。
そして、はい、それは風景モードで写真を撮るときにのみ起こります。私がポートレートで写真を撮る場合、これまでのところすべてがうまくいきます。
ここで提案されているように、Android:configChanges="orientation|screenSize"
を使用しようとします。
私にとっては、開発者モードで「アクティビティを保持しない」というオプションを有効にすると発生します。チェックを外した後、ギャラリーまたはカメラアプリから画像を選択することで、バックアップ中にアクティビティが再作成されません。