如何解决在 andorid 11 中使用下载管理器和作用域存储的影响
我在做什么
- 我正在尝试使用下载管理器将文件下载到设备 内部存储
- 内部存储是指位置
/storage/emulated/0/Android/data/com.example.code/files/Download/Devrath/test.db
- 现在我正在使用下面的模拟器是可以运行并成功下载文件的代码
问题
- 范围存储在未来会对此产生影响吗?
- 或者由于下载管理器是一个系统服务,它会不会继续 工作
清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.code">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:usesCleartextTraffic="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Code">
<activity android:name=".MainActivityTwo">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
gradle
compileSdkVersion 31
buildToolsversion "30.0.3"
defaultConfig {
applicationId "com.example.code"
minSdkVersion 16
targetSdkVersion 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
MainActivityTwo
public class MainActivityTwo extends AppCompatActivity {
private static final int REQUEST_CODE = 100;
//public static final String imageURL = "http://www.tutorialspoint.com/java/java_tutorial.pdf";
public static final String imageURL = "http://speedtest.ftp.otenet.gr/files/test10Mb.db";
// String imageName = "java_tutorial.pdf";
String filePath = "";
String imageName = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
filePath = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString()
.concat(File.separator)
.concat("Devrath").concat(File.separator);
imageName = "test.db";
// storage runtime permission
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_CODE);
}
}
Button btnDownloadImage = findViewById(R.id.initiateDownloadId);
Button chkIfFileExistsId = findViewById(R.id.chkIfFileExistsId);
btnDownloadImage.setonClickListener(v -> downloadImage(imageURL,imageName));
chkIfFileExistsId.setonClickListener(v -> checkIfFileExists());
}
public void downloadImage(String url,String outputFileName) {
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setTitle(imageName);
request.setDescription("Downloading " + imageName);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.allowScanningByMediaScanner();
//request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,outputFileName); // ---> Working
//request.setDestinationInExternalFilesDir(this,Environment.getExternalStorageDirectory().toString() + File.separator,outputFileName);
request.setDestinationInExternalFilesDir(this,filePath,outputFileName);
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
}
private void checkIfFileExists() {
//-> /storage/emulated/0/Android/data/com.example.code/files/Download/Devrath/test.db
File mFile = new File(filePath.concat(imageName));
if(mFile.exists()){
Toast.makeText(this,"File exists",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(this,"File does not exists",Toast.LENGTH_LONG).show();
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。