8

完全に機能しているアプリがあります。カメラのインテントまたは権限に1つの問題があります。

アプリは、ユーザーがボタンを押すとカメラアクティビティを起動することになっています。これは正常に機能していますが、ユーザーがカメラの[OK]ボタンをクリックして写真を受け入れると、アプリに戻りません。カメラのキャンセルボタンを押すと、期待どおりにアプリに戻ります。

私はここで見つけることができるすべての同様の質問を読みましたが、それらのどれも私の問題を解決していません。アプリで2つを交互に使用したいので、画像を保存する場所をカメラに正確に伝える必要があります。CameraIntentを作成して開始するコードは次のとおりです。

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.parse(imagePath));
startActivityForResult(intent, 11);

(文字列である)に対して複数の値を試しましimagePathたが、カメラの[OK]ボタンがそれらのいずれでも機能しませんでした。これらは私が試したパスです:

/mnt/sdcard/<appName>/cameraImages/image1.jpg
from Environment.getExternalStorageDirectory()

/mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg
from context.getExternalCacheDir()

/mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg
from context.getCacheDir()

マニフェストファイルに次の権限があります。

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

コードの何が問題になっているのかを理解するのを手伝ってもらえますか、それとも有効なパスを教えてもらえますか?ユーザーがアプリケーションを離れた後も画像が存在し続けることは重要ではないため、画像をキャッシュの場所に保存することをお勧めしますが、誰が画像にアクセスできるかはあまり気にしません。

4.1エミュレーターですべてのテストを行い、4.1 SDKでコンパイルしています。最小バージョンは、API 8(2.2)です。

私はその意図をonActivityResult()主張しましたが、問題に影響を与えるべきではないので、皆さんがそのコードを見る必要はないと思います。

4

2 に答える 2

2

私はその問題を理解することができました。を使用する代わりに、エクストラを追加するときUri.parse(imagePath)に使用する必要があるようです。Uri.fromFile(new File(imagePath))同じ問題を抱えている人に役立つ場合に備えて、新しいインテントコードを以下に示します。

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(imagePath)));
startActivityForResult(intent, 11);

現在context.getExternalCacheDir()、フルパスの作成に使用していますimagePath。私が作成した結果のパスはです/mnt/sdcard/Android/data/<appPkg>/cache/<appName>/cameraImages/image1.jpg

于 2012-10-11T16:28:36.923 に答える
1

問題は、ローカル(アプリケーションの内部)ファイルをカメラアクティビティと共有する必要があることです。この効果のためにコンテンツプロバイダーを作成することは、私のために働いた唯一のことです。ここで2番目のオプションを参照してください:http: //dharmendra4android.blogspot.com/2012/04/save-captured-image-to-applications.html

于 2015-07-30T13:56:04.983 に答える