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

原创不易

转载请标明出处

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

相关推荐
北漂Zachary4 小时前
四大编程语言终极对比
android·java·php·laravel
学习使我健康8 小时前
Android App 启动原理
android·android studio
TechMix9 小时前
【性能工具】atrace、systrace、perfetto抓取的trace文件有何不同?
android·性能优化
张小潇9 小时前
AOSP15 WMS/AMS系统开发 - 窗口层级源码分析
android·前端
努力努力再努力wz12 小时前
【MySQL入门系列】掌握表数据的 CRUD:DML 核心语法与执行逻辑解析
android·开发语言·数据结构·数据库·c++·b树·mysql
zh_xuan14 小时前
Android gradle任务
android·gradle构建
Grackers15 小时前
Android Perfetto 系列 10:Binder 调度与锁竞争
android·binder
格林威15 小时前
AI视觉检测:Jetson Orin vs RTX A2000 推理速度对比
人工智能·数码相机·机器学习·计算机视觉·视觉检测·机器视觉·工业相机
李白你好15 小时前
Android 自动化渗透测试指令生成
android·自动化
CeshirenTester16 小时前
Claude Code 不只是会写代码:这 10 个 Skills,才是效率分水岭
android·开发语言·kotlin