diff --git a/app/src/main/java/io/legado/app/lib/permission/PermissionActivity.kt b/app/src/main/java/io/legado/app/lib/permission/PermissionActivity.kt index 0b1f8cf04..5f51544a9 100644 --- a/app/src/main/java/io/legado/app/lib/permission/PermissionActivity.kt +++ b/app/src/main/java/io/legado/app/lib/permission/PermissionActivity.kt @@ -2,6 +2,7 @@ package io.legado.app.lib.permission import android.content.Intent import android.net.Uri +import android.os.Build import android.os.Bundle import android.provider.Settings import androidx.activity.result.contract.ActivityResultContracts @@ -33,10 +34,15 @@ class PermissionActivity : AppCompatActivity() { super.onCreate(savedInstanceState) val rationale = intent.getStringExtra(KEY_RATIONALE) val permissions = intent.getStringArrayExtra(KEY_INPUT_PERMISSIONS)!! + val requestType = intent.getIntExtra(KEY_INPUT_REQUEST_TYPE, Request.TYPE_REQUEST_PERMISSION) showSettingDialog(permissions, rationale) { try { - requestPermissionsResult.launch(permissions) + when (requestType) { + Request.TYPE_MANAGE_ALL_FILES_ACCESS -> openManageAllFilesAccessSettings() + Request.TYPE_REQUEST_SETTING -> openSettingsActivity() + else -> requestPermissionsResult.launch(permissions) + } } catch (e: Exception) { AppLog.put("请求权限出错\n$e", e, true) RequestPlugins.sRequestCallback?.onError(e) @@ -62,6 +68,27 @@ class PermissionActivity : AppCompatActivity() { } } + private fun openManageAllFilesAccessSettings() { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { + openSettingsActivity() + return + } + val packageUri = Uri.fromParts("package", packageName, null) + val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION).apply { + data = packageUri + } + runCatching { + settingActivityResult.launch(intent) + }.getOrElse { + val fallbackIntent = Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION) + runCatching { + settingActivityResult.launch(fallbackIntent) + }.getOrElse { + openSettingsActivity() + } + } + } + override fun onRequestPermissionsResult( requestCode: Int, permissions: Array,