Ich versuche einfach, URI von einer Aktivität zur anderen zu übergeben. Und dabei bemerkte ich, dass ich eine Ausnahme für keine Datei gefunden hatte und konnte sehen, dass die End-Dateinamen nicht identisch waren, indem ich sie ausgab. (Nur die path
String und uri.getEncodedPath()
)Android: Uri Dateiname Verwirrung
Also habe ich versucht, die Zeichenfolge zu senden und Rekonstruieren des uri wie folgt:
Log.e("debug_path_string", data.getExtras().getString(CONSTANT));
# try { Uri photoUri = Uri.fromFile(new File(data.getExtras().getString(CONSTANT))); }
try { Uri photoUri = Uri.parse(data.getExtras().getString(CONSTANT)); }
catch (Exception e) { Log.e("IO", e.getMessage()); }
Log.d("debug", photoUri.getEncodedPath());
pageListAdapter.append(photoUri);
und die Protokolle
12-26 04:18:04.172 4425-4425/com.example.myawesomeapp E/debug_path_string: /storage/emulated/0/Android/data/com.example.myawesomeapp/files/Pictures/JPEG_20171226_041803672615875.jpg
12-26 04:18:04.172 4425-4425/com.example.myawesomeapp D/debug: /document_images/JPEG_20171226_041746-1723016833.jpg
12-26 04:18:04.225 4425-4425/com.example.myawesomeapp W/Glide: Failed to find GeneratedAppGlideModule. You should include an annotationProcessor compile dependency on com.github.bumptech.glide:compiler in your application and a @GlideModule annotated AppGlideModule implementation or LibraryGlideModules will be silently ignored
12-26 04:18:04.400 4425-4425/com.example.myawesomeapp W/Glide: Load failed for content://com.example.myawesomeapp.fileprovider/document_images/JPEG_20171226_041746-1723016833.jpg
Sind
file://storage/emulated/0/Android/data/com.example.myawesomeapp/files/Pictures/JPEG_20171226_041803672615875.jpg
content://com.example.myawesomeapp.fileprovider/document_images/JPEG_20171226_041746-1723016833.jpg
# provided
# com.example.myawesomeapp.fileprovider/document_images resolves path
# storage/emulated/0/Android/data/com.example.myawesomeapp/files/Pictures
gleichwertig?
Offensichtlich der Ladevorgang fehlgeschlagen, weil es eine solche Datei nicht finden konnte. (Ich habe den Pfad überprüft und eine Datei mit dem Dateinamen existiert im Pfad).
Kann mir jemand erklären, warum Uri.parse()
oder Uri.fromFile(new file(path))
versucht, einen anderen Dateinamen als das Original zu erstellen?
Warum scheint Android nicht zu mögen JPEG_20171226_041803672615875
aber JPEG_20171226_041746-1723016833
und auf welcher Basis ändert es?
Hinweis: Ich versuche tat Uri
direkt zu senden data.putExtra()
und data.getParcelableExtra()
verwenden. Sie geben die gleichen Ergebnisse, als ob ich die Saite geschickt hätte und daraus einen Uri konstruiert hätte.
UPDATE: ich File.createTempFile()
bin mit, die eine Zufallszahl am Ende anfügt. Selbst wenn FilesProvider eine eigene Referenz generiert, sollte er den ursprünglichen Dateinamen, der JPG_date_time
ist, nicht berühren.
Während ich beobachte, was es verändert hat, habe ich gerade diese seltsame Sache bemerkt!
|......16.......||.......rest......|
JPEG_20171226_041803672615875.jpg
JPEG_20171226_041746-1723016833.jpg
# Running one more example
JPEG_20171226_121309-2003514507.jpg
JPEG_20171226_121239-882490989.jpg
|......16.......||.......rest......|
Es ist die ersten 16 Zeichen konservierende ... !!! Das gibt mir das Gefühl, dass es etwas mit der Länge zu tun hat.
Ich empfehle Ihnen, verweisen Sie https://developer.android.com/training/secure-file-sharing/setup-sharing.html –
Werfen Sie einen Blick auf photoUri.toString(). – greenapps
Ich bin überrascht, warum dieses 16 Char-Zeug in den Dokumenten nicht als Warnung erwähnt wird –