问题
笔者使用java进行android开发,启动相机时 intent.resolveActivity returns null
takePictureIntent.resolveActivity(getPackageManager()) == null
详细问题
笔者使用如下代码启动相机
// 启动相机
@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");
}
}
控制台报错:
E/DiseaseAndPestDetectionActivity: Camera app is not available to handle the intent
解决方案
步骤1、 在packageappsrcmainAndroidManifest.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
原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈
原文地址:https://blog.csdn.net/T_Y_F_/article/details/135709241
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_59608.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!