から写真を撮った後、全体像を取得しようとしていFragment
ます。
ファイル ( Uri.fromFile(file)
) の Uri を使用すると、写真を撮って [OK] ボタンをタップした後にカメラが終了しません (Uri に書き込めないか、誰が何を知っているかのように見えます)。
File
String
の形式でを使用して'/data/data/com.package.bla/cache/img198346262jpg'
も、同様に機能しません (ファイルはそこにありますが、カメラが何も保存していないため空です)。
私がこれまでに試したこと:
- この例のように、作成後にファイルを削除します。ただし、カメラの終了後、ファイルは存在しません。
- 念のため、外部ストレージの読み取り権限を追加しました
したがって、なぜ画像が保存されず、なぜ機能しないのかをテストして理解するために多くの時間を費やしたり無駄にしたりする理由がわかりません。
断片:
private void launchCamera() {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File outputDir = getActivity().getCacheDir();
File file = null;
try {
file = File.createTempFile("img", "jpg", outputDir);
} catch (IOException e) {
e.printStackTrace();
}
if (file != null) {
mImageUri = Uri.fromFile(file); //using Uri is not even exiting the camera
//mImageUri = File.toString(); //If I use String instead of an Uri, it works better (ie, can accept camera photo)
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
startActivityForResult(cameraIntent, RESULT_TAKE_IMAGE);
}
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
Bitmap original = BitmapFactory.decodeFile(mImageUri.toString(), bounds);
}
}
編集されたコード、mImageUri。説明したように、Uri を使用すると、カメラ アプリで写真を受け入れることさえできません。文字列を使用すると、写真を受け入れることができますが、写真は実際には保存されません (つまり、ファイルの内部は 0 バイトです)。
説明: 問題は、キャッシュ ディレクトリへの保存に関連していました。バグである可能性があります。アクセス許可がないか、カメラ アプリがアプリケーションのプライベート データ ディレクトリに保存できません。パーミッション FLAG_GRANT_WRITE_URI_PERMISSION を追加しても解決しませんでした。関連記事:カメラからの画像をプライベート アプリのキャッシュ ディレクトリに保存する、およびインテント経由で起動したときにカメラ データをキャッシュに保存する
UPDATE Android 2.2以降getExternalCacheDir()
の方法は、代わりに使用できますgetCacheDir()