From fafc852840a050ab8fa729d5905bb776bcb4f83a Mon Sep 17 00:00:00 2001 From: 5151561 <62234963+5151561@users.noreply.github.com> Date: Fri, 27 Mar 2026 01:26:12 +0800 Subject: [PATCH] Merge pull request #767 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 代码优化 --- .../app/lib/permission/PermissionActivity.kt | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) 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,