You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android权限自动拒绝问题求助(API33、OnePlus Nord 2t)

解决Android 13(API33)下存储权限自动拒绝的问题

问题核心原因

Android 13(API 33)彻底重构了媒体存储权限体系,READ_EXTERNAL_STORAGE权限不再弹出请求弹窗,系统会直接自动拒绝该权限请求——这就是你看到"prompting"后立刻收到"not ok"的原因。这个权限在API33及以上版本已被废弃,需要使用更细分的媒体权限替代。

解决方案步骤

1. 更新AndroidManifest.xml中的权限声明

保留旧权限兼容API30-32版本,同时添加API33+所需的媒体权限:

<!-- 兼容API30-32的存储权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
<!-- API33+读取图片/视频权限 -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<!-- 如果需要读取音频文件,添加这个 -->
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />

2. 修改权限请求逻辑(Kotlin代码)

根据系统版本动态选择要请求的权限:

package com.example.testpermissions

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.Manifest
import android.content.pm.PackageManager
import android.os.Build
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat

class MainActivity : AppCompatActivity() {

    private val STORAGE_PERMISSION_CODE = 101

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        checkAndRequestStoragePermission()
    }

    private fun checkAndRequestStoragePermission() {
        val requiredPermissions = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            // API33+请求媒体权限,根据你的需求选择对应的权限
            arrayOf(Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.READ_MEDIA_VIDEO)
        } else {
            // API30-32请求旧存储权限
            arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE)
        }

        // 检查是否所有权限都已授予
        val allPermissionsGranted = requiredPermissions.all {
            ContextCompat.checkSelfPermission(this, it) == PackageManager.PERMISSION_GRANTED
        }

        if (allPermissionsGranted) {
            Toast.makeText(this, "权限已授予", Toast.LENGTH_SHORT).show()
        } else {
            Toast.makeText(this, "请求权限中", Toast.LENGTH_SHORT).show()
            ActivityCompat.requestPermissions(this, requiredPermissions, STORAGE_PERMISSION_CODE)
        }
    }

    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)

        if (requestCode == STORAGE_PERMISSION_CODE) {
            // 检查是否所有请求的权限都被授予
            val allGranted = grantResults.all { it == PackageManager.PERMISSION_GRANTED }
            if (allGranted) {
                Toast.makeText(this, "权限请求成功", Toast.LENGTH_SHORT).show()
            } else {
                Toast.makeText(this, "权限被拒绝", Toast.LENGTH_SHORT).show()
            }
        }
    }
}

额外说明

  • 你的OnePlus Nord 2T设备本身不会直接导致权限被拒,核心问题是Android 13的权限规则变更。
  • 如果用户拒绝权限后勾选了"不再询问",后续请求会直接被拒绝,此时你需要引导用户到App设置页面手动开启权限。

内容的提问来源于stack exchange,提问作者chdarro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:48:39