DownloadManager不在Android Q上工作-Android/Java

DownloadManager不在Android Q上工作-Android/Java,java,android,Java,Android,我被卡住了。我搜索了又搜索又尝试了很多东西,让我试着总结一下 我正在尝试使用Android 10上的下载管理器(也称为Andriod Q)下载一个文件 这是我正在使用的代码。我试过http和https。我添加了明文标志。我尝试了SetDestinationNexternalFilesDir和SetDestinationNexternalPublicDir,但都没有成功。SetDestinationNexternalFilesDir确实为我的应用程序在Android/data目录中创建了一个文件夹

我被卡住了。我搜索了又搜索又尝试了很多东西,让我试着总结一下

我正在尝试使用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);