Hinweis: ähnliche Frage ist unter SO Links gefragt vorbei, aber keiner der vorgeschlagene Lösung für mich gearbeitet, damit dieses Thema zu starten.MediaStore.Images.Media.insertImage - java.io.FileNotFoundException - Android
- MediaStore.Images.Media.insertImage is returning null when trying to save the image
- Why Images.Media.insertImage return null
Problemstellung: ich das Bild von einer URL herunterzuladen und dann das gleiche zu teilen versuchen. Dazu benötige ich den Uri, den ich durch Speichern des Bildes in MediaStore.Images.Media erhalte.
Code:
A. Erhalten heruntergeladene Bild von einer AsyncTask Klasse
public void processDownloadedImage(Bitmap bitmap) {
if (bitmap == null) {
Toast.makeText(this,"Image could not be downloaded and shared!",Toast.LENGTH_LONG).show();
}
else {
downloadedImage = bitmap;
checkPermissionShowShareSheet();
}
}
B. Überprüfen Erlaubnis für Eibisch und höher
public void checkPermissionShowShareSheet() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.System.canWrite(this)){
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},2909);
}
else {
updateImageUri(downloadedImage);
showShareSheet(downloadedImageUri);
}
}
else {
updateImageUri(downloadedImage);
showShareSheet(downloadedImageUri);
}
}
C. Gewinnung Bild Uri
private void updateImageUri(Bitmap inImage){
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
fixMediaDir();
String path = MediaStore.Images.Media.insertImage(this.getContentResolver(), inImage, "SomeImage", null);
storePathInSharedPreferences(path);
Uri uri = Uri.parse(path);
downloadedImageUri = uri;
}
void fixMediaDir() {
File sdcard = Environment.getExternalStorageDirectory();
if (sdcard != null) {
File mediaDir = new File(sdcard, "DCIM/Camera");
if (!mediaDir.exists()) {
mediaDir.mkdirs();
}
}
}
D. Manifest-Datei verwendet, um Berechtigungen
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Problem: Wert von unten Zeile zurückgegeben wird, ist null
String path = MediaStore.Images.Media.insertImage(this.getContentResolver(), inImage, "SomeImage", null);
Irgendwelche Ideen?
Hier ist Teil Stackbacktrace:
Failed to insert image java.io.FileNotFoundException: No such file or directory
at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:146)
at android.content.ContentProviderProxy.openAssetFile(ContentProviderNative.java:620)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:939)
at android.content.ContentResolver.openOutputStream(ContentResolver.java:686)
at android.content.ContentResolver.openOutputStream(ContentResolver.java:662)
at android.provider.MediaStore$Images$Media.insertImage(MediaStore.java:934)
at myorg.myapp.ImageDescription.updateImageUri(ImageDescription.java:165)
tat aber dasselbe Ergebnis :(.. Weg –
noch null ist, ich habe habe meinen Beitrag mit einem Teil des Stack Backtrace aktualisiert, bitte schauen Sie –