Android 下载管理器 "Download Unsuccessful"
Android Download Manager "Download Unsuccessful"
这是我第一次尝试实现 DownloadManager
,无论我尝试什么,我总是会收到一条通知,说 "Download unsuccessful." 我看过许多其他 SO 论坛,一些教程,我所拥有的应该有用。是的,我已经在清单文件中设置了互联网和外部存储权限。是的,我已经在 phone 的应用程序设置中授予了存储权限。我已经在 Android 模拟器 运行 API 28 和真正的 phone 运行 上都试过了。这是我的代码:
String url = "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4";
DownloadManager downloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setTitle("title");
request.setDescription("Your file is downloading");
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MUSIC, "" + System.currentTimeMillis());
request.allowScanningByMediaScanner();
request.setAllowedOverMetered(true);
request.setAllowedOverRoaming(true);
//Enqueue download and save the referenceId
long downloadReference = downloadManager.enqueue(request);
if (downloadReference != 0) {
Toast.makeText(getApplicationContext(), "download started", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(getApplicationContext(), "no download started", Toast.LENGTH_SHORT).show();
}
如有任何帮助或建议,我们将不胜感激。谢谢
此问题是由于网络安全问题引起的。如果你在上面的馅饼 API 中使用了不安全的 url,那么它就无法执行你的 url。检查 Official Documentation.
Reason for avoiding cleartext traffic is the lack of confidentiality,
authenticity, and protections against tampering; a network attacker
can eavesdrop on transmitted data and also modify it without being
detected.
在清单中添加以下内容以绕过所有安全措施。
<application
android:name=".ApplicationClass"
....
android:usesCleartextTraffic="true">
我在 1/11/2021 上的体验,最小 SDK 19,目标 SDK 30
我用了一天的下载服务终于成功了。
总结给第一次尝试的人:
- 不要忘记在清单中添加 WRITE_EXTERNAL_STORAGE 和 INTERNET 权限。
- 使用 requestPermissions() 授予用户权限。
- 使用 getExternalFilesDir() 而不是 getExternalStorageDirectory()。
- 如果您从 http:// 下载,请添加 usesCleartextTraffic="true" 以显示。
这是我第一次尝试实现 DownloadManager
,无论我尝试什么,我总是会收到一条通知,说 "Download unsuccessful." 我看过许多其他 SO 论坛,一些教程,我所拥有的应该有用。是的,我已经在清单文件中设置了互联网和外部存储权限。是的,我已经在 phone 的应用程序设置中授予了存储权限。我已经在 Android 模拟器 运行 API 28 和真正的 phone 运行 上都试过了。这是我的代码:
String url = "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4";
DownloadManager downloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setTitle("title");
request.setDescription("Your file is downloading");
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MUSIC, "" + System.currentTimeMillis());
request.allowScanningByMediaScanner();
request.setAllowedOverMetered(true);
request.setAllowedOverRoaming(true);
//Enqueue download and save the referenceId
long downloadReference = downloadManager.enqueue(request);
if (downloadReference != 0) {
Toast.makeText(getApplicationContext(), "download started", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(getApplicationContext(), "no download started", Toast.LENGTH_SHORT).show();
}
如有任何帮助或建议,我们将不胜感激。谢谢
此问题是由于网络安全问题引起的。如果你在上面的馅饼 API 中使用了不安全的 url,那么它就无法执行你的 url。检查 Official Documentation.
Reason for avoiding cleartext traffic is the lack of confidentiality, authenticity, and protections against tampering; a network attacker can eavesdrop on transmitted data and also modify it without being detected.
在清单中添加以下内容以绕过所有安全措施。
<application
android:name=".ApplicationClass"
....
android:usesCleartextTraffic="true">
我在 1/11/2021 上的体验,最小 SDK 19,目标 SDK 30
我用了一天的下载服务终于成功了。 总结给第一次尝试的人:
- 不要忘记在清单中添加 WRITE_EXTERNAL_STORAGE 和 INTERNET 权限。
- 使用 requestPermissions() 授予用户权限。
- 使用 getExternalFilesDir() 而不是 getExternalStorageDirectory()。
- 如果您从 http:// 下载,请添加 usesCleartextTraffic="true" 以显示。