首页 > 解决方案 > Android Java 下载视频并保存到内部存储

问题描述

我通过以下代码实现这一点

                String mBaseFolderPath = android.os.Environment
                        .getExternalStorageDirectory().getPath()
                        + File.separator
                        + "FolderName" + File.separator;
                if (!new File(mBaseFolderPath).exists()) {
                    new File(mBaseFolderPath).mkdir();
                }

                String fname = post.date.toString();

                Uri downloadUri = Uri.parse(post.vUrl.trim());
                if (downloadUri == null) {
                    return;
                }

                String mFilePath = "file://" + mBaseFolderPath + "/" + fname ;
                DownloadManager.Request req = new DownloadManager.Request(downloadUri);
                req.setDestinationUri(Uri.parse(mFilePath));
                req.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                DownloadManager dm = (DownloadManager) context.getSystemService(context.DOWNLOAD_SERVICE);
                dm.enqueue(req);
                Toast.makeText(context, R.string.video_downloaded, Toast.LENGTH_LONG).show();

不幸的是,这只适用于我的模拟器,但不适用于真实设备。我正在征求许可,下载图像适用于所有设备,但视频不适用。

Fatal Exception: java.lang.SecurityException
Unsupported path /storage/emulated/0/FolderName/1604782936

是错误日志

Fatal Exception: java.lang.SecurityException: Unsupported path            /storage/emulated/0/FolderName/1604782936
at android.os.Parcel.createException(Parcel.java:2071)
at android.os.Parcel.readException(Parcel.java:2039)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
at android.content.ContentProviderProxy.insert(ContentProviderNative.java:481)
at android.content.ContentResolver.insert(ContentResolver.java:1844)
at android.app.DownloadManager.enqueue(DownloadManager.java:1081)
at com.flax.de.Cells.PostTabelViewCell.savePost(PostTabelViewCell.java:821)
at com.flax.de.Cells.PostTabelViewCell.access$1900(PostTabelViewCell.java:78)
at com.flax.de.Cells.PostTabelViewCell$23.onClick(PostTabelViewCell.java:643)
at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:1229)
at android.widget.AdapterView.performItemClick(AdapterView.java:330)
at android.widget.AbsListView.performItemClick(AbsListView.java:1259)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3306)
at android.widget.AbsListView$3.run(AbsListView.java:4296)
at android.os.Handler.handleCallback(Handler.java:888)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8178)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)

即使我请求许可并且下载图像也可以正常工作。

我的应用就像 instagram,我希望用户能够将视频直接下载到他们的手机上,就像在 TikTok 上一样

我已经添加了

android:requestLegacyExternalStorage="true"

到我的清单文件

标签: javaandroidandroid-permissionsandroid-download-manager

解决方案


推荐阅读