Android 13(SDK33)点击按钮不弹出READ_MEDIA_VIDEO权限弹窗求助
Android 13(SDK33)下READ_MEDIA_VIDEO权限弹窗不显示的解决方案
问题根源
代码里的版本判断顺序错了。Build.VERSION_CODES.M对应API23,Build.VERSION_CODES.TIRAMISU对应API33,由于API33也满足>=23的条件,所以点击按钮时会直接进入第一个分支检查READ_EXTERNAL_STORAGE权限,完全不会执行到针对SDK33的READ_MEDIA_VIDEO权限请求逻辑,自然弹不出对应的权限弹窗。
修正后的点击事件代码
binding.imageView10.setOnClickListener { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { // 处理SDK33及以上的READ_MEDIA_VIDEO权限 if (ContextCompat.checkSelfPermission(this, READ_MEDIA_VIDEO) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(this, READ_MEDIA_VIDEO)) { Toast.makeText(this@VideosActivity, "需要权限以访问视频", Toast.LENGTH_LONG).show() } else { ActivityCompat.requestPermissions( this, arrayOf(READ_MEDIA_VIDEO), GALLERY_REQUEST_CODE ) } } else { videoPickDialog() } } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // 处理SDK23到32的READ_EXTERNAL_STORAGE权限 if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.READ_EXTERNAL_STORAGE)) { Toast.makeText(this@VideosActivity, "需要权限以访问视频", Toast.LENGTH_LONG).show() } else { ActivityCompat.requestPermissions( this, arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE), GALLERY_REQUEST_CODE ) } } else { videoPickDialog() } } else { // SDK21-22无需动态申请权限,直接打开选择弹窗 videoPickDialog() } }
关于Manifest配置
你当前的Manifest权限声明是正确的,无需修改:
READ_MEDIA_VIDEO、READ_MEDIA_IMAGES无版本限制,适配SDK33+READ_EXTERNAL_STORAGE限制在SDK32及以下,WRITE_EXTERNAL_STORAGE限制在SDK28及以下,符合Android权限适配规范
内容的提问来源于stack exchange,提问作者terlan abaszade
相关产品推荐
相关产品推荐

