无法下载文件 - java、下载管理器、API 28



在过去的 48 小时内,我正在尝试解决这个问题,我已经浏览了许多示例......仍然一无所有。我正在尝试将单个文件下载添加到我的应用程序中 - 稍后它将由 RabbitMQ 触发,但目前 - 出于测试目的,我想使用 buttonClick 来做到这一点,在下面的示例中,我跳过了任何其他参数(例如描述、标题等......单击后,我收到下载管理器无法下载文件的信息,当然文件存在于链接上(我可以从手机浏览器下载它而没有任何问题(。

public void downloadFile2(View view) {
if(PermissionCheck.readAndWriteExternalStorage(this)) {
DownloadManager downloadmanager = (DownloadManager)this.getSystemService(this.DOWNLOAD_SERVICE);
Uri uri = Uri.parse("http://xxxxxx/File1.pdf");
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setVisibleInDownloadsUi(true);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,"/File1.pdf");
downloadmanager.enqueue(request);
}
}

Environment.DIRECTORY_DOWNLOADS- 我尝试过多个目录下载,但没有一个有效setDestinationInExternalPublicDir (I have laso try setDestinationInExternalFilesDir- 没有运气

package com.example.majap;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
public class PermissionCheck {
public static boolean readAndWriteExternalStorage(Context context) {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
return false;
} else {
return true;
}
}
}

当然,在清单中我有(甚至很多(

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />

4天后,和28杯咖啡 - 我找到了解决方案:

<application
....
android:usesCleartextTraffic="true"

从 Android 8 开始 - 不允许明文 HTTP 流量