且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Firebase Storage将文件下载到Android Q中的Pictures或Movie文件夹

更新时间:2023-01-07 07:38:53

== NEW ANSWER ==

如果要监视下载进度,可以使用FirebaseStorage SDK的getStream(),如下所示:

httpsReference.getStream((state, inputStream) -> {

                long totalBytes = state.getTotalByteCount();
                long bytesDownloaded = 0;

                byte[] buffer = new byte[1024];
                int size;

                while ((size = inputStream.read(buffer)) != -1) {
                    stream.write(buffer, 0, size);
                    bytesDownloaded += size;
                    showProgressNotification(bytesDownloaded, totalBytes, requestCode);
                }

                // Close the stream at the end of the Task
                inputStream.close();
                stream.flush();
                stream.close();

            }).addOnSuccessListener(taskSnapshot -> {
                showDownloadFinishedNotification(downloadedFileUri, downloadURL, true, requestCode);
                //Mark task as complete so the progress download notification whether success of fail will become removable
                taskCompleted();
                contentValues.put(MediaStore.Files.FileColumns.IS_PENDING, false);
                resolver.update(uriResolve, contentValues, null, null);
            }).addOnFailureListener(e -> {
                Log.w(TAG, "download:FAILURE", e);

                try {
                    stream.flush();
                    stream.close();
                } catch (IOException ioException) {
                    ioException.printStackTrace();
                    FirebaseCrashlytics.getInstance().recordException(ioException);
                }

                FirebaseCrashlytics.getInstance().recordException(e);

                //Send failure
                showDownloadFinishedNotification(null, downloadURL, false, requestCode);

                //Mark task as complete
                taskCompleted();
            });

==旧答案==

最后,经过数小时的努力,我设法做到了,但是最后选择了使用.getBytes(maximum_file_size)而不是.getFile(file_object).

非常感谢@Kasim提出了getBytes(maximum_file_size)的思想,并提供了与InputStreamOutputStream一起工作的示例代码.通过搜索与I/O相关的SO主题也是一个很大的帮助此处此处 >