この Google チュートリアルに従って、 で画像をキャプチャするインテントを開始しましたnew Intent(MediaStore.ACTION_IMAGE_CAPTURE)
。このチュートリアルgetExternalStoragePublicDirectory
では、私のアプリに最適な public ディレクトリを使用することをお勧めします。しかし、彼らの例では代わりに を使用していgetExternalFilesDir
ます。次に、ファイルの URI をインテントに渡すにはMediaStore.EXTRA_OUTPUT
、コンテンツ URI を取得する必要があります。なぜなら、Android N をターゲットにしたいからです。現在、NI は、あまり好ましくないFileUriExposedException
ように思われる を取得し始めました。
このようなファイルがあるとすれば...
private File createImageFile() throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File storageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyAppFolder");
if (!storageDir.exists() && !storageDir.mkdir())
Log.w(TAG, "Couldn't create photo folder: " + storageDir.getAbsolutePath());
File image = new File(storageDir, timeStamp + ".jpg");
mCurrentPhotoPath = image.getAbsolutePath();
return image;
}
...パブリック ピクチャ ディレクトリの組み込みプロバイダを使用して、コンテンツ URI を取得できますか? もしそうなら、どのように?
私は次のようなものを試しました
takePictureIntent.putExtra(
MediaStore.EXTRA_OUTPUT,
FileProvider.getUriForFile(this, MediaStore.AUTHORITY, createImageFile()));
しかし、それはただ投げます
IllegalArgumentException: android.support.FILE_PROVIDER_PATHS メタデータがありません
その権限は正しいですか?公開ファイルを共有するために独自のプロバイダーを使用する必要がある場合、FILE_PROVIDER_PATHS メタデータでどのパスを指定できますか? 私が見つけることができるすべてのオプションは、プライベートディレクトリ用です。