私は単に、あるアクティビティから別のアクティビティへuriを渡そうとしています。そして、その間、ファイルが見つからないという例外が発生したことに気がつき、最終ファイル名が印刷されていないことがわかりました。 (ただ、path
文字列とuri.getEncodedPath()
)Android:Uriファイル名の混乱
だから私は、文字列を送信すると、次のようにURIを再構築しようとした:
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);
とログ
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
が
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
です同等ですか?
明らかに、このようなファイルが見つからなかったため、読み込みに失敗しました。 (私は、パスと文字列パスに存在するファイル名のファイルをチェックしています)。
Uri.parse()
またはUri.fromFile(new file(path))
が元のファイル名と異なるファイル名を作成しようとした理由を教えてもらえますか?
なぜAndroidはJPEG_20171226_041803672615875
ではなくJPEG_20171226_041746-1723016833
と嫌いで、どのような基準で変更されるのですか?
注:私は直接data.putExtra()
とdata.getParcelableExtra()
を使用してUri
を送信してみました。彼らは私が弦を送ってそれからUriを作ったのと同じ結果を出しています。
UPDATE:私は最後に乱数を付加しFile.createTempFile()
を使用してい。 FilesProviderが独自の参照を生成していても、元のファイル名であるJPG_date_time
には触れてはいけません。
何が変わったのかを観察しながら、この奇妙なことに気づいただけです!
|......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......|
最初の16文字を保存しています... !!!これは私がそれが間違いなく長さと関係があると感じさせる。あなたが別のアクティビティへのURIフォームつの活性を渡したい場合は
https://developer.android.com/training/secure-file-sharing/setup-sharing.html –
photoUri.toString()をご覧ください。 – greenapps
私はこの16文字のものは、警告としてもドキュメントに記載されていない理由に驚いています –