android使用相机 intent.resolveActivity returns null

问题

笔者使用java进行android开发,启动相机时 intent.resolveActivity returns null

java 复制代码
takePictureIntent.resolveActivity(getPackageManager()) == null

详细问题

笔者使用如下代码启动相机

java 复制代码
// 启动相机
    @SuppressLint("LongLogTag")
    private void dispatchTakePictureIntent() {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            cameraLauncher.launch(takePictureIntent);
        } else {
            Log.e("DiseaseAndPestDetectionActivity", "Camera app is not available to handle the intent");
        }
    }

控制台报错:

java 复制代码
E/DiseaseAndPestDetectionActivity: Camera app is not available to handle the intent

解决方案

步骤1、 在package\app\src\main\AndroidManifest.xml中配置如下内容:

具体操作如下图所示:

具体代码:

xml 复制代码
<queries>
    <!-- Camera -->
    <intent>
        <action android:name="android.media.action.IMAGE_CAPTURE" />
    </intent>
</queries>

产生原因

问题产生的原因是在Android 11及更高版本中,由于引入了更严格的权限控制和隐私策略,应用需要通过 元素在清单文件中声明对其他应用组件的查询权限。以笔者的情况为例,由于笔者在应用中使用了相机 (MediaStore.ACTION_IMAGE_CAPTURE),因此需要声明对相机应用的查询权限。

解决原因

解决方案中的配置 <queries> 元素指定了应用需要查询相机应用的权限。这告诉系统,笔者的应用会查询 IMAGE_CAPTURE 意图,因此系统会提供与该意图匹配的应用列表。

此配置的目的是允许系统知道你的应用将使用与相机相关的功能,以便为用户提供更好的控制和隐私保护。

总结

笔者一年之前进行项目开发,尚未遇到上述情况,查询得知问题产生的原因是在Android 11及更高版本中,由于引入了更严格的权限控制和隐私策略,应用需要通过 元素在清单文件中声明对其他应用组件的查询权限。这种情况在开发中并不少见,平台从安全的角度出发,引入了更严格的权限控制和隐私策略。但同时,也增加的程序开发的负担。以至于很多开发框架,有时旧版本比新版本更受开发者欢迎。

参加文献

intent.resolveActivity returns null in API 30

产生原因与解决原因部分内容 部分参考chatgpt

原创不易

转载请标明出处

如果对你有所帮助 别忘啦点赞支持哈

相关推荐
折翅鵬8 小时前
Android史诗级网络优化实践总结
android·网络
赏金术士9 小时前
Android 项目模块化与 Feature 组件实践
android·kotlin·模块化
summerkissyou198713 小时前
Android-UI-获取屏幕尺寸的方法
android·ui
用户860225046747214 小时前
Kotlin 函数式编程入门与实践指南
android
最爱睡觉睡觉睡觉15 小时前
CSS → Flutter 对照手册
android·前端
xingpanvip16 小时前
星盘接口开发文档:马盘次限盘接口指南
android·开发语言·python·php·lua
用户261904985615716 小时前
JUnit4 完整配置流程
android
用户261904985615716 小时前
JaCoCo 完整配置流程
android
FrameNotWork17 小时前
HarmonyOS 6.1 云应用客户端适配实战(一):环境搭建与编译系统
数码相机·华为·harmonyos
QING61817 小时前
Android面试 —— 八股文之app启动流程
android·面试·app