Konvertiere den Inhalt: // URI in den tatsächlichen Pfad in Android 4.4
Habe ich versucht, eine Lösung (siehe unten), das funktioniert gut, außer in Android 4.4 Aufruf startActivityForResult()
bringt eine Tätigkeit mit dem Titel "Öffnen", "Aktuelles", "Bilder", "Downloads", sowie mehrere apps zur Auswahl. Wenn ich wählen Sie "Bilder" und versuchen Sie, das zurückgegebene content-URI (mit dem code unten), wird der Anruf zu cursor.getString()
null zurück. Wenn ich die exakt gleiche Datei mit der Galerie-app, cursor.getString()
gibt einen Datei-Pfad. Ich habe nur getestet, das in API-Level 16 und 19. Alles funktioniert wie erwartet im 16. So weit wie 19 geht, ich habe zu wählen, der Galerie oder einer anderen app oder es funktioniert nicht.
private String getRealPathFromURI(Context context, Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = { MediaStore.Images.Media.DATA };
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(column_index);
return path;
} finally {
if (cursor != null) {
cursor.close();
}
}
}
InformationsquelleAutor der Frage Raging Software | 2013-11-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese erhalten den Pfad der Datei, aus der MediaProvider, DownloadsProvider, und ExternalStorageProvider, während fallen zurück auf den inoffiziellen ContentProvider Methode, die Sie erwähnen.
Quelle aFileChooser
InformationsquelleAutor der Antwort Kishan Vaghela
Es gibt keinen zuverlässigen Weg, dies zu tun auf jedem Android-version. Ein
content://
Uri
nicht zu vertreten haben, eine Datei auf dem Dateisystem, geschweige denn eine, die Sie zugreifen können.Android 4.4 die änderungen bieten die storage-framework einfach erhöht die Frequenz, mit denen Sie begegnen
content://
Uri
Werte.Wenn Sie eine
content://
Uri
, bitte verbrauchen Sie es mit einemContentResolver
und Methoden wieopenInputStream()
undopenOutputStream()
.InformationsquelleAutor der Antwort CommonsWare
Ich habe mit diesem problem konfrontiert, aber in meinem Fall, was ich tun wollte, war, geben Sie einen konkreten Uri zu der Galerie, so dass ich verwenden können, Ernte später. Sieht aus wie in dem neuen Dokument-Browser von KitKat können wir das nicht mehr, es sei denn, Sie wählen, Galerie in der navigation Schublade, und, wie Sie gesagt haben, öffnen Sie das Bild oder die Datei direkt von dort.
In der Uri der Fall, können Sie immer noch abrufen der Pfad beim öffnen fromt er Dokument-Browser.
Und dann in onActivityResult:
Wenn Sie müssen dann öffnen Sie eine Datei, die mit diesem Weg, Sie müssen nur yo verwenden einen Content Resolver:
InformationsquelleAutor der Antwort Makerhack
Eingeführt wird, in eine Google-API. Sie können versuchen, diese:
InformationsquelleAutor der Antwort FireBear
Wenn Sie wirklich brauchen ein Datei-Pfad. Erste, erhalten Sie die Daten mittels ContentResolver. Dann können Sie speichern die Daten in eine temp-Datei, und verwenden Sie diesen Pfad.
(Hatte ich die Verwendung einer library mit Datei-Objekt in einer Funktion parameter.)
InformationsquelleAutor der Antwort fatihpense
Dank @FireBear modifizierte ich die Antwort jetzt kommt man Weg von Medien-Datei
String filePath=saveBitmap(Aktivität,getBitmapFromUri(imageUri),"tmpFile").getPath();
InformationsquelleAutor der Antwort Shshank Bhong
Holen Sie sich einen Pfad aus Uri:- die ich erstellt hatte, eine Util-Klasse, die den Weg für - Storage-Access-Framework-Dokumente, sowie den _data-Feld für die MediaStore und andere Datei-basierte ContentProviders.
ConvertUriToFilePath :-
}
Beispiel-Code :
InformationsquelleAutor der Antwort A-Droid Tech