2012-02-04 7 views
1

クラッシュ:私はonActivityResult()で結果を取得し、ImageViewのにビットマップをセットよりは、私はこの(何も特別な)のようなカメラの意図を起動する活性を有する活動

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
    File photo = new File(Environment.getExternalStorageDirectory(), filename); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); 
    Uri imageUri = Uri.fromFile(photo); 
    startActivityForResult(intent, CAMERA_REQUEST); 

。再び、特別なことは何もない。

問題は、カメラアプリが常に横長であることです。したがって、ユーザーがOKを押してアクティビティに戻すときにデバイスを水平方向に保ち、以前にアクティビティがポートレートであった場合、アクティビティは再構築する必要があるため、クラッシュします。カメラで[OK]をタップする前にデバイスを縦向きに傾けると、クラッシュしません。これをどうやって回避するのですか?

+0

この質問には直接関係しませんが、私は同様の問題があり、それは私のコードではありませんでした。私はNexus Mobile(maguro)でAndroid 4.2を使用していました。 4.3の工場イメージで点滅すると、これがすべて修正されました。カメラの問題がある場合は、必ずテストデバイスを調べてください。 –

答えて

4

フィットが回転する前にアクティビティの設定を保持するには、onSaveInstanceStateメソッドをオーバーライドする必要があります。次に、onCreateメソッドで、Bundle引数がnullかどうかを確認できます。そうでない場合は、アクティビティーを再作成しており、そこから保存された設定をロードする必要があります。

+0

これはうまくいった。私はこれまでにこの方法を使っていましたが、カメラの意図から戻ってくるような感じがするので、...レイジーな方法が一般的でシンプルな作業だと思っていました。ありがとうございました! – koopaking3

+1

今後の視聴者のために、あなたは 'onRestoreInstanceState(バンドルバンドル)'でBundleにアクセスすることもできます。 – koopaking3

0

アプリケーションで横置きのサポートが本当に必要ない場合は、ポートレートモードでのアクティビティをブロックすることもできます。オリエンテーションの変更を管理する必要はありません。マニフェストでandroid:screenOrientation="portrait"属性あなたの活動に

もしあなたが景観をサポートしたいのであれば、私はブリガムの答えを見なければならないのではないかと心配しています。

4

速くて汚いルートは、向きの変更を自分で処理することです。アプリケーションのランドスケープとポートレートで異なるレイアウトがない場合、これは適切な方法です。方法は次のとおりです。

AndroidManifestのあなたのアクティビティにandroid:configChanges="orientation"を追加してください。

onSaveInstanceStateがカメラデータや他のデータを使用していることを確認して、アプリケーションがリロードしたときにそのデータをonRestoreInstanceStateにリロードできるようにすることもできます。 LogCatエラーを共有すると、回転時にデータが失われているため、おそらくNullPointerExceptionが表示されます。私は自分のお金をカメラのデータに入れました。

+1

あなたのクイックで汚いルートは素晴らしかった! 20秒で私の問題を解決した –

関連する問題