要在Android 10及以上版本上下载并保存PDF文件,需要请求存储权限。以下是一种解决方法,包含了相应的代码示例:
// 检查是否已经授予存储权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// 如果权限未授予,则请求权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
1);
} else {
// 如果权限已经授予,则执行下载操作
downloadPDFFile();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 用户授予了存储权限
downloadPDFFile();
} else {
// 用户拒绝了存储权限,可以给出相应的提示
Toast.makeText(this, "需要存储权限才能下载文件", Toast.LENGTH_SHORT).show();
}
}
}
private void downloadPDFFile() {
// 使用DownloadManager下载PDF文件
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("PDF文件的URL"));
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "filename.pdf");
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
downloadManager.enqueue(request);
}
以上代码中,downloadPDFFile()
方法使用DownloadManager
来进行PDF文件的下载,将文件保存在下载目录下,并在下载完成后显示通知。
请注意,上述代码只处理了存储权限的请求和下载操作,实际应用中还需要处理其他相关的逻辑,例如检查网络连接、文件是否已存在等。