0

そこで、次のコードを使用してカメラ アクティビティを起動しようとしています。

//In public void captureImage()
...
Intent cameraIntent = new Intent(MediaStore.ACTION_CAPTURE_IMAGE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                      Uri.fromFile(new File("/sdcard/image.jpg")));
startActivityForResult(cameraIntent, REQUEST_CAMERA);

そして、結果を処理するには:

//In onActivityResult()
...
case REQUEST_CAMERA:
  Intent intent = new Intent (CurrentScreen.this, NextScreen.this);
  intent.putExtra(data);
  startActivity(intent);
  CurrentScreen.this.finish();
...

intent.putExtra(data)小さなビットマップをインテントに添付し、次のアクティビティでサムネイルとして使用し、フルサイズのファイルは/sdcard/image.jpg.

これは、(ドキュメントによると) 予想される動作であり、サムネイル用に小さなビットマップを使用し、大きなファイルを保存します。しかし、これを G1 と Eris でテストしたところ、奇妙な動作が見られました。

G1 の場合:

  • resultCode は RESULT_OK を示していますが、結果ハンドラーに返されるインテント データは null です。
  • また、 EXTRA_OUTPUT は完全に無視されているようです。画像がどこに保存されているのかわかりません。

エリスで:

  • インテント データが正常に返される
  • EXTRA_OUTPUT も無視されますが、画像は次の場所にある通常のメディア ストアに保存されます。/sdcard/dcim/100media

私の質問はこれです: 標準のカメラ アクティビティを使用して、私がやろうとしていることに対して一貫した動作を得る方法はありますか? カスタム アクティビティを作成して、思いどおりに動作させることもできますが、その方法は避けたいと思います。

4

1 に答える 1

0

私は Java/Android 開発の世界に不慣れなため、あなたの質問に対する回答がありません。しかし、私はあなたがやっていることと似たようなことを試みていますが、単に写真を撮り、それを電子メール メッセージに添付したいだけです。

私はあなたの例の一部を実装し、カメラが指定したファイルを作成したこと、および次の写真に同じファイル名を使用すると、前のファイルが上書きされることを確認できました。

しかし、私が本当に言おうとしていたのは、pat "/sdcard/..." が実際に存在するかどうかをテストする必要があるということです。また、パスを次のアクティビティに渡すことで、プロセスを簡素化できる可能性があります。

幸運を、

ジェイミー・アーウィン

于 2010-12-08T20:10:45.733 に答える