Saya mencoba memperbaiki masalah setelah fitur baru ditambahkan di sistem file Android tetapi saya mendapatkan kesalahan ini:
android.os.FileUriExposedException: file:///storage/emulated/0/MyApp/Camera_20180105_172234.jpg exposed beyond app through ClipData.Item.getUri()
Jadi saya berharap seseorang dapat membantu saya memperbaiki ini :)
Terima kasih
private Uri getTempUri() {
// Create an image file name
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String dt = sdf.format(new Date());
imageFile = null;
imageFile = new File(Environment.getExternalStorageDirectory()
+ "/MyApp/", "Camera_" + dt + ".jpg");
AppLog.Log(
TAG,
"New Camera Image Path:- "
+ Environment.getExternalStorageDirectory()
+ "/MyApp/" + "Camera_" + dt + ".jpg");
File file = new File(Environment.getExternalStorageDirectory() + "/MyApp");
if (!file.exists()) {
file.mkdir();
}
imagePath = Environment.getExternalStorageDirectory() + "/MyApp/"
+ "Camera_" + dt + ".jpg";
imageUri = Uri.fromFile(imageFile);
return imageUri;
}
Jawaban:
Untuk sdk 24 dan yang lebih baru, jika Anda perlu mendapatkan Uri dari file di luar penyimpanan aplikasi Anda, Anda mengalami kesalahan ini.
Solusi @ eranda.del memungkinkan Anda mengubah kebijakan untuk mengizinkan ini dan berfungsi dengan baik.
Namun jika Anda ingin mengikuti pedoman google tanpa harus mengubah kebijakan API aplikasi Anda, Anda harus menggunakan FileProvider.
Pertama-tama untuk mendapatkan URI file, Anda perlu menggunakan metode FileProvider.getUriForFile ():
Kemudian Anda perlu mengonfigurasi penyedia Anda di manifes android:
(Dalam "otoritas", gunakan nilai yang sama dengan argumen kedua metode getUriForFile () (tanda tangan aplikasi + ".provider"))
Dan terakhir Anda perlu membuat file ressources: "file_paths". File ini perlu dibuat di bawah direktori res / xml (Anda mungkin perlu membuat direktori ini juga):
sumber
<external-path ...
digunakan saat Anda menginginkan Environment.getExternalStorageDirectory (). dan gunakan<files-path ...
jika Anda membutuhkan Context.getFilesDir (). Lebih baik Anda memeriksa dokumen resmi terlebih dahulu: developer.android.com/reference/android/support/v4/content/…androidx
dalamnya adalah:android:name="androidx.core.content.FileProvider"
Tambahkan blok kode berikut sebelum memulai penjelajahan kamera atau file
Silakan lihat mode ketat tautan rujukan dan itu menjelaskan semua penggunaan dan detail teknis.
sumber
Tidak ada konfigurasi penyedia yang diperlukan ke dalam AndroidManifest, hanya izin Kamera dan Penyimpanan yang diizinkan. Gunakan kode berikut untuk memulai kamera:
Setelah mengambil gambar, Anda dapat menemukan gambar yang Anda ambil di:
sumber