【发布时间】:2019-12-27 00:45:59
【问题描述】:
我正在尝试连接 ContentResolver 和 Firebase 存储下载。
目标:将文件从 Firebase 存储下载到图片库或音频文件夹。
我做了什么:
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DISPLAY_NAME, "FileName1");
values.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
values.put(MediaStore.MediaColumns.RELATIVE_PATH, "Pictures" + customDir);
AsyncQueryHandler asyncQueryHandler1 = new AsyncQueryHandler(myContentResolver){
@Override
protected void onInsertComplete(int token, Object cookie, Uri uri) {
super.onInsertComplete(token, cookie, uri);
File localFile = new File(uri.getPath());
StorageReference ref = FirebaseStorage.getInstance().getReference(myFireStorageFilePath());
ref.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
........
}
};
asyncQueryHandler1.startInsert(-1, null, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
但是,我得到了错误(即使我请求了权限):
E/StorageException: Permission denied
java.io.IOException: Permission denied
at java.io.UnixFileSystem.createFileExclusively0(Native Method)
at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
at java.io.File.createNewFile(File.java:1008)
at com.google.firebase.storage.FileDownloadTask.processResponse(com.google.firebase:firebase-storage@@17.0.0:138)
at com.google.firebase.storage.FileDownloadTask.run(com.google.firebase:firebase-storage@@17.0.0:229)
at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(com.google.firebase:firebase-storage@@17.0.0:1106)
at com.google.firebase.storage.StorageTask$$Lambda$10.run(Unknown Source:2)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
我不明白我做错了什么。我可以创建 Uri 然后创建文件吗?
谢谢
【问题讨论】:
-
确保你可以先写到
EXTERNAL_CONTENT_URI本地路径。 -
WRITE_EXTERNAL_STORAGE 已被请求并授予
标签: java android firebase android-contentresolver