DownloadManager不在Android Q上工作-Android/Java
我被卡住了。我搜索了又搜索又尝试了很多东西,让我试着总结一下 我正在尝试使用Android 10上的下载管理器(也称为Andriod Q)下载一个文件 这是我正在使用的代码。我试过http和https。我添加了明文标志。我尝试了SetDestinationNexternalFilesDir和SetDestinationNexternalPublicDir,但都没有成功。SetDestinationNexternalFilesDir确实为我的应用程序在Android/data目录中创建了一个文件夹。文件夹中没有文件DownloadManager不在Android Q上工作-Android/Java,java,android,Java,Android,我被卡住了。我搜索了又搜索又尝试了很多东西,让我试着总结一下 我正在尝试使用Android 10上的下载管理器(也称为Andriod Q)下载一个文件 这是我正在使用的代码。我试过http和https。我添加了明文标志。我尝试了SetDestinationNexternalFilesDir和SetDestinationNexternalPublicDir,但都没有成功。SetDestinationNexternalFilesDir确实为我的应用程序在Android/data目录中创建了一个文件夹
try
{
isStoragePermissionGranted();
Log.e(TAG, "*** STARTING DOWNLOAD MANAGER ***");
Uri uri = Uri.parse("http://HaveTriedManyDifferentWebServers.com/filename.jpg");
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setTitle("downloading");
request.setDescription("Downloading a file");
request.addRequestHeader("Accept", "image/jpg");
request.setDestinationInExternalFilesDir(this, "", "filename.jpg");
//request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "filename.png");
DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
downloadManager.enqueue(request);
Log.e(TAG, "*** ENDING DOWNLOAD MANAGER ***");
}
catch (Exception e)
{
Log.e("ERRRRORRRRRRRRR", e.toString());
}
我已经添加了权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
此外,我可以在服务器端看到文件甚至没有被请求。我也在谷歌和我自己的网络服务器上使用过随机图像,但两者都不起作用。从我的服务器日志来看,这个安卓应用程序甚至没有进入web服务器。我能够将URL复制/粘贴到手机的浏览器中,并验证它是否能够成功与web服务器通信
编辑:
清单中确实有requestLegacyExternalStorage=“true”
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:screenOrientation="portrait"
android:requestLegacyExternalStorage="true"
android:usesCleartextTraffic="true"
>
<activity android:name=".SelectionActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
除非您在清单文件中请求明文通信,否则Android 10上不允许使用http协议
对于getExternalFilesDir(),您不需要在清单文件中具有读/写权限,也不需要为其请求旧版。运行时也不需要代码。我遇到了同样的问题,最后我发现我应该使用setDestinationUri()而不是setDestinationNexternalPublicDir() 还有一件事:安卓Q不支持Http,改用Https 下面是我的代码:
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setAllowedNetworkTypes(Request.NETWORK_WIFI);
request.setNotificationVisibility(Request.VISIBILITY_VISIBLE);
request.setTitle("download");
request.setDescription("apk downloading");
request.setAllowedOverRoaming(false);
request.setDestinationUri(Uri.fromFile(new File(context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + "/foo/", "111.apk")));
long downloadID = downloadManager.enqueue(request);
您好,谢谢您的回复。我的web服务器是https,但我尝试了http和https,但两者都不起作用。这是非常令人沮丧的,因为我无法得到任何错误。你找到了解决方案吗?你找到了解决方案吗?在安卓10上也有同样的问题。它成功了。谢谢
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:screenOrientation="portrait"
android:requestLegacyExternalStorage="true"
android:usesCleartextTraffic="true"
>
<activity android:name=".SelectionActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setAllowedNetworkTypes(Request.NETWORK_WIFI);
request.setNotificationVisibility(Request.VISIBILITY_VISIBLE);
request.setTitle("download");
request.setDescription("apk downloading");
request.setAllowedOverRoaming(false);
request.setDestinationUri(Uri.fromFile(new File(context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + "/foo/", "111.apk")));
long downloadID = downloadManager.enqueue(request);