Android 11 次写入访问 sdcard/Android/someapp
Android 11 Write Access to sdcard/Android/someapp
我们正在尝试将一个应用程序从 10 迁移到 11,这个应用程序修改了另一个应用程序“sdcard/Android/someapp”目录中的 XML 文件。我们一直在浏览,有很多关于这个主题的东西,其中 none 似乎不再给我们写这个文件的权限。此应用程序适用于 10,但不适用于 11。我们已请求“管理所有文件”权限,该权限似乎已被授予,但仍然无法 read/write 此权限???
这是我们请求权限的代码......我们是否遗漏了什么?
if (getApplicationContext().getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.R) {
if (!Environment.isExternalStorageManager()){
try {
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
intent.addCategory("android.intent.category.DEFAULT")
intent.data = Uri.parse(String.format("package:%s", applicationContext.packageName))
startActivityForResult(intent, 2296)
} catch (e: Exception) {
val intent = Intent()
intent.action = Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
startActivityForResult(intent, 2296)
}
}
} else {
//below android 11
if (Environment.isExternalStorageLegacy()){
permissioncheck = ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permissioncheck == PackageManager.PERMISSION_DENIED){
ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE), REQUEST_WRITE_EXTERNAL_CODE);
}
permissioncheck = ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE);
if (permissioncheck == PackageManager.PERMISSION_DENIED){
ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE), REQUEST_READ_EXTERNAL_CODE);
}
}
}
提前致谢!
Google 修改了 Android 11 的权限。如果您将 Android 10 作为目标(但 Google 将无法刷新您的应用)
您应该更改权限并写入媒体存储:
https://developer.android.com/training/data-storage/shared/media
看起来底线是您将无法写入 And11+
中的另一个应用程序外部存储文件夹 (/sdcard/Android/data/com.app.someapp)
感谢您的帮助!
我们正在尝试将一个应用程序从 10 迁移到 11,这个应用程序修改了另一个应用程序“sdcard/Android/someapp”目录中的 XML 文件。我们一直在浏览,有很多关于这个主题的东西,其中 none 似乎不再给我们写这个文件的权限。此应用程序适用于 10,但不适用于 11。我们已请求“管理所有文件”权限,该权限似乎已被授予,但仍然无法 read/write 此权限??? 这是我们请求权限的代码......我们是否遗漏了什么?
if (getApplicationContext().getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.R) {
if (!Environment.isExternalStorageManager()){
try {
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
intent.addCategory("android.intent.category.DEFAULT")
intent.data = Uri.parse(String.format("package:%s", applicationContext.packageName))
startActivityForResult(intent, 2296)
} catch (e: Exception) {
val intent = Intent()
intent.action = Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
startActivityForResult(intent, 2296)
}
}
} else {
//below android 11
if (Environment.isExternalStorageLegacy()){
permissioncheck = ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permissioncheck == PackageManager.PERMISSION_DENIED){
ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE), REQUEST_WRITE_EXTERNAL_CODE);
}
permissioncheck = ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE);
if (permissioncheck == PackageManager.PERMISSION_DENIED){
ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE), REQUEST_READ_EXTERNAL_CODE);
}
}
}
提前致谢!
Google 修改了 Android 11 的权限。如果您将 Android 10 作为目标(但 Google 将无法刷新您的应用)
您应该更改权限并写入媒体存储: https://developer.android.com/training/data-storage/shared/media
看起来底线是您将无法写入 And11+
中的另一个应用程序外部存储文件夹 (/sdcard/Android/data/com.app.someapp)感谢您的帮助!