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

原创不易

转载请标明出处

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

相关推荐
louisgeek8 小时前
Android ViewBinding
android
城东米粉儿10 小时前
Kotlin 协程的异常处理 笔记
android
锥栗10 小时前
【其他】基于Trae的大模型智能应用开发
android·java·数据库
恋猫de小郭11 小时前
Flutter 2026 Roadmap 发布,未来计划是什么?
android·前端·flutter
zh_xuan15 小时前
kotlin Flow的用法2
android·开发语言·kotlin·协程·flow·被压
zh_xuan15 小时前
kotlin 测试协程嵌套
android·kotlin·协程
Doro再努力15 小时前
【Linux操作系统15】深入理解Linux进程概念:从理论到实践
android·linux·运维
城东米粉儿15 小时前
Android Lifecycle、LifecycleOwner、ViewLifecycleOwner、LifecycleScope、ViewModelScop
android
m0_5287490016 小时前
sql基础查询
android·数据库·sql
安卓机器16 小时前
安卓玩机自做小工具------用于ROM修改 解打包boot.img修改小工具
android