Android调用原生相机Intent在OnePlus设备无响应问题求助
问题排查方案
补充包可见性配置(Android 11+ 兼容问题,一加Nord默认搭载Android 10以上系统,该问题出现概率极高)
从Android 11(API Level 30)开始,系统对应用可查询的其他应用包做了限制,调用resolveActivity()查询相机应用时,如果没有在AndroidManifest.xml中声明查询权限,会直接返回null,导致后续唤起相机的逻辑完全不执行,看起来就像点击事件没有生效。
你需要在Manifest的根节点下添加如下配置:<queries> <intent> <action android:name="android.media.action.IMAGE_CAPTURE" /> </intent> </queries>如果你适配的系统版本低于API 30,也可以申请
QUERY_ALL_PACKAGES权限,但不推荐,前者是合规的最小权限声明方式。检查动态相机权限申请
你只在Manifest中声明了相机硬件要求,没有确认是否在点击拍照按钮前动态申请了android.permission.CAMERA权限,一加的系统权限管控更加严格,未授权时会直接拦截相机唤起逻辑,不会弹出权限申请提示。需要在触发dispatchTakePictureIntent()前先校验相机权限是否已获取,未获取先申请权限再执行后续逻辑。验证FileProvider配置合法性
检查你项目中res/xml/file_paths.xml的配置是否匹配你存储图片的路径,示例正确配置如下:<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-files-path name="my_images" path="Pictures" /> </paths>另外确认代码中
FileProvider.getUriForFile()的第二个参数authorities的值和Manifest中provider配置的android:authorities完全一致,不要出现拼写错误。临时注释resolveActivity校验做调试
你可以先暂时注释掉takePictureIntent.resolveActivity(packageManager)?.also{}这一层校验,直接执行后续逻辑,测试是否能正常唤起相机,如果可以就100%是包可见性配置缺失的问题。
内容的提问来源于stack exchange,提问作者Piyush Kumar

