我跟着this Google tutorial開始意圖捕獲圖像new Intent(MediaStore.ACTION_IMAGE_CAPTURE)
。本教程建議使用公共目錄getExternalStoragePublicDirectory
,這對我的應用程序非常有用。但是他們的例子改爲使用getExternalFilesDir
。然後傳遞文件的URI到意圖MediaStore.EXTRA_OUTPUT
我have to get a content URI,因爲我想定位到Android N之前瞄準N我只是通過一個文件:// URI和每個人,但谷歌很高興。現在在N我開始得到FileUriExposedException
,似乎是not very favorable。Android:如何獲取內容:// URI在外部存儲中的文件PUBLIC目錄
所以因爲我有一個這樣的文件...
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元數據中指定哪條路徑?所有options I can find用於私人目錄。
「那是正確的權力?」 - 不,因爲你不是'MediaStore'。 「如果我必須使用我自己的提供者共享公共文件,那麼我可以在FILE_PROVIDER_PATHS元數據中指定什麼路徑?」 - ''給你外部存儲的根。 'FileProvider'沒有辦法指定你正在嘗試使用的目錄。 –
CommonsWare
@CommonsWare如果FileProvider無法使用該目錄,那麼我是唯一使用私有目錄還是停止目標N的選項?這似乎很愚蠢。感謝您的建議。 – Paul
「如果FileProvider無法使用該目錄」 - 這不是我寫的。這就是說,由於你想要的子目錄的細節因設備而異,試圖使用''會有風險。 「那麼我唯一的選擇是使用私人目錄還是停止定位N?」 - 沒有。你可以編寫你自己的'ContentProvider'。或者,你可以爲我的'StreamProvider'編寫一個插件。或者,您可以在外部存儲上使用自定義目錄,您可以從外部存儲根目錄控制其路徑(儘管這可能是「私人目錄」的含義)。 –
CommonsWare