Ich versuche, ein Problem zu beheben, nachdem die neue Funktion im Android-Dateisystem hinzugefügt wurde, aber ich erhalte folgende Fehlermeldung:
android.os.FileUriExposedException: file:///storage/emulated/0/MyApp/Camera_20180105_172234.jpg exposed beyond app through ClipData.Item.getUri()
Ich hoffe, jemand kann mir helfen, das zu beheben :)
Vielen Dank
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;
}
Antworten:
Ab SDK 24 tritt dieser Fehler auf, wenn Sie den Uri einer Datei außerhalb Ihres App-Speichers abrufen müssen.
Mit @ eranda.del-Lösungen können Sie die Richtlinie ändern, um dies zu ermöglichen, und es funktioniert einwandfrei.
Wenn Sie jedoch der Google-Richtlinie folgen möchten, ohne die API-Richtlinie Ihrer App ändern zu müssen, müssen Sie einen FileProvider verwenden.
Um den URI einer Datei zu erhalten, müssen Sie zunächst die FileProvider.getUriForFile () -Methode verwenden:
Dann müssen Sie Ihren Provider in Ihrem Android-Manifest konfigurieren:
(Verwenden Sie in "Behörden" denselben Wert wie im zweiten Argument der Methode getUriForFile () (App-Signatur + ".provider").)
Und schließlich müssen Sie die Ressourcendatei "file_paths" erstellen. Diese Datei muss im Verzeichnis res / xml erstellt werden (wahrscheinlich müssen Sie auch dieses Verzeichnis erstellen):
quelle
<external-path ...
wird verwendet, wenn Sie Environment.getExternalStorageDirectory () möchten. und verwenden<files-path ...
Sie, wenn Sie Context.getFilesDir () benötigen. Sie sollten zuerst die offiziellen Dokumente überprüfen: developer.android.com/reference/android/support/v4/content/…androidx
darin:android:name="androidx.core.content.FileProvider"
Fügen Sie den folgenden Codeblock hinzu, bevor Sie mit dem Durchsuchen der Kamera oder der Datei beginnen
Bitte beziehen Sie sich auf den strengen Verweislink- Modus und erläutern Sie alle Verwendungs- und technischen Details.
quelle
Es ist keine erforderliche Anbieterkonfiguration in AndroidManifest nur für Kamera- und Speicherberechtigungen zulässig. Verwenden Sie den folgenden Code, um die Kamera zu starten:
Nach der Aufnahme des Bildes finden Sie das aufgenommene Bild in:
quelle