java - 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"
到我的清单文件