android - 在 Android 11 api30 上访问 Android/data/“SOME APP FOLDER”
问题描述
如何在 Android R (11) 中访问 /Android/data/"Target app"?
private boolean isPermissionGranted(){
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.R){
// for Android 11
return Environment.isExternalStorageManager();
}else {
int readExternalStoragePermission = ContextCompat.checkSelfPermission(this , Manifest.permission.READ_EXTERNAL_STORAGE);
return readExternalStoragePermission == PackageManager.PERMISSION_GRANTED;
}
}
public void takePermission(View view){
if (isPermissionGranted()){
Toast.makeText(getBaseContext(), "Permission is Already Granted!", Toast.LENGTH_SHORT).show();
}else {
takePermission();
}
}
private void takePermission(){
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.R){
try {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.addCategory("android.intent.category.DEFAULT");
intent.setData(Uri.parse(String.format("package:%s" , getApplicationContext().getPackageName())));
startActivityForResult(intent , 100);
}catch (Exception exception){
Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
startActivityForResult(intent , 100);
}
}else {
ActivityCompat.requestPermissions(this , new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},101);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100){
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.R){
if (Environment.isExternalStorageManager()){
Toast.makeText(getBaseContext(), "Permission Granted in Android 11 ", Toast.LENGTH_SHORT).show();
}else {
takePermission();
}
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults.length > 0){
if (requestCode == 101){
boolean readExternalStorage = grantResults[0] == PackageManager.PERMISSION_GRANTED;
if (readExternalStorage){
Toast.makeText(getBaseContext(), "Read Permission is Granted in Android 10 or below", Toast.LENGTH_SHORT).show();
}else {
takePermission();
}
}
}
}
这正在努力写到每一个地方。但是当我想在 /storage/emulated/0/Android/data/"Some App Folder" 中写入时,我收到了这个错误:2021-08-27 17:46:09.803 23862-23862/com.itscaptive.frpsrcchanger E/Permission_LOG :java.io.FileNotFoundException:/storage/emulated/0/Android/data/com.tencent.ig/SrcVersion.ini:打开失败:EACCES(权限被拒绝)
任何人都可以帮助我吗?:)
解决方案
Android 11 你不再可以访问其他应用程序的数据文件夹
https://developer.android.com/about/versions/11/privacy/storage#other-apps-data
推荐阅读
- docker - 尝试使用 Nginx Docker 反向代理时连接被拒绝
- reactjs - Reacjs API 逐页显示数据
- flutter - Flutter 和 Appwrite 中的 Getter 问题
- gnuplot - 在用 gnuplot 绘制的曲线上调出两个特定点
- docker - Dockerfile 无法验证 Postgres apt 签名
- mongodb - 在 Apache 服务器/CentosOS 8 上运行的 Flask 应用程序无法连接到 Mongo DB Atlas
- python - 在 pd.concat 中并行化 for 循环
- java - Spring Boot PathMatchingResourcePatternResolver 找不到预期的资源
- javascript - 两个 monaco 编辑器之间的视觉匹配线
- java - 是否可以使用 Http4k 上传到带有预签名 URL 的 Amazon S3 存储桶?