Ich kenne den absoluten Pfad eines Bildes (z. B. /sdcard/cats.jpg). Gibt es eine Möglichkeit, den Inhalt uri für diese Datei zu erhalten?
Tatsächlich lade ich in meinem Code ein Bild herunter und speichere es an einem bestimmten Ort. Um das Bild in einer ImageView-Instanz festzulegen, öffne ich derzeit die Datei über den Pfad, erhalte die Bytes, erstelle eine Bitmap und setze dann die Bitmap in der ImageView-Instanz. Dies ist ein sehr langsamer Prozess. Wenn ich stattdessen den Inhalt uri erhalten könnte, könnte ich die Methode sehr einfach verwenden imageView.setImageUri(uri)
Antworten:
Versuche es mit:
Oder mit:
quelle
Uri.fromFile
wird nicht auf Android 26+ funktionieren, sollten SieAKTUALISIEREN
Ich hatte dieselbe Frage für meine Datei-Explorer-Aktivität. Sie sollten wissen, dass die Datei contenturi for file nur Mediastore-Daten wie Bild, Audio und Video unterstützt. Ich gebe Ihnen den Code, um Bildinhalt uri von der Auswahl eines Bildes von der SD-Karte zu erhalten. Probieren Sie diesen Code aus, vielleicht funktioniert er für Sie ...
quelle
MediaStore.Images.Media
zuMediaStore.Video.Media
, aber noch kein Glück.// Dieser Code funktioniert für Bilder unter 2.2, nicht sicher, ob andere Medientypen vorhanden sind
quelle
Die akzeptierte Lösung ist wahrscheinlich die beste Wahl für Ihre Zwecke, aber um die Frage in der Betreffzeile tatsächlich zu beantworten:
In meiner App muss ich den Pfad von URIs und den URI von Pfaden abrufen. Das Vorherige:
Letzteres (was ich für Videos mache, aber auch für Audio oder Dateien oder andere Arten von gespeicherten Inhalten verwendet werden kann, indem MediaStore.Audio (usw.) für MediaStore.Video ersetzt wird):
Grundsätzlich wird in der
DATA
SpalteMediaStore
(oder in dem von Ihnen abgefragten Unterabschnitt) der Dateipfad gespeichert, sodass Sie diese Informationen zum Nachschlagen verwenden.quelle
OpenableColumns.DISPLAY_NAME & OpenableColumns.SIZE
wenn die sendende App sogar den "Regeln" folgt. Ich habe festgestellt, dass einige wichtige Apps nur diese beiden Felder zurückgeben und nicht immer das_data
Feld. Wenn Sie nicht über das Datenfeld verfügen, das normalerweise einen direkten Pfad zum Inhalt enthält, müssen Sie zuerst den Inhalt lesen und in eine Datei oder in den Speicher schreiben, und dann haben Sie Ihren eigenen Pfad.Sie können diese beiden Möglichkeiten je nach Verwendung verwenden
Uri uri = Uri.parse("String file location");
oder
Uri uri = Uri.fromFile(new File("string file location"));
Ich habe beide Wege ausprobiert und beide funktionieren.
quelle
Die einfachste und robusteste Methode zum Erstellen von Content Uri
content://
aus einer Datei ist die Verwendung von FileProvider . Von FileProvider bereitgestelltes Uri kann auch verwendet werden, um Uri zum Teilen von Dateien mit anderen Apps bereitzustellen. Um File Uri von einem absoluten Pfad von zu erhaltenFile
, können Sie DocumentFile.fromFile (neue Datei (Pfad, Name)) verwenden, die in Api 22 hinzugefügt wird und für die folgenden Versionen null zurückgibt.quelle
Es ist spät, kann aber in Zukunft jemandem helfen.
Um den Inhalts-URI für eine Datei abzurufen, können Sie die folgende Methode verwenden:
FileProvider.getUriForFile(Context context, String authority, File file)
Es gibt den Inhalts-URI zurück.
In diesem Abschnitt erfahren Sie, wie Sie a einrichten
FileProvider
quelle
Abrufen der Datei-ID ohne Schreiben von Code, nur mit den CLI-Befehlen der ADB-Shell:
quelle
Permission Denial: Do not have permission in call getContentProviderExternal() from pid=15660, uid=10113 requires android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY
, es sei denn, Sie sind verwurzelt.Verwenden Sie besser eine Validierung, um Versionen vor Android N zu unterstützen. Beispiel:
https://es.stackoverflow.com/questions/71443/reporte-crash-android-os-fileuriexposedexception-en-android-n
quelle
Sie können versuchen, unten Code-Snippet
quelle