问题
笔者使用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、 在package\app\src\main\AndroidManifest.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://www.toymoban.com/news/detail-812374.html
原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈
文章来源地址https://www.toymoban.com/news/detail-812374.html
到了这里,关于android使用相机 intent.resolveActivity returns null的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!