1、使用场景: App调用系统相机拍照设置图片。
2、问题描述: targetSdkVersion >= android 11的之后,以下代码captureIntent.resolveActivity(context.getPackageManager()) 直接返回了null。
// 拉起系统相机
Intent captureIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
//判断相机是否正常
if (captureIntent.resolveActivity(context.getPackageManager()) != null) {
....
}
3、系统环境:Android 11,targetSdkVersion == 33
4、解决方案:
(1)调用系统应用时:
方案1:在清单文件中添加queries标签。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.demo">
<!-- 判断相机是否可用 -->
<queries>
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE"/>
</intent>
<intent>
<action android:name="android.media.action.VIDEO_CAPTURE"/>
</intent>
</queries>
</manifest>
方案2:使用hasSystemFeature方法进行判断相机是否可用。
if(context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)) {
//相机可用
}
(2)打开其他第三方app,比如:
<!--Android 11 版本为加强用户隐私保护引入较多变更-->
<queries>
<!-- 微信支付SDK-->
<package android:name="com.tencent.mm" />
<!-- 支付宝支付SDK-->
<package android:name="com.eg.android.AlipayGphone" />
<package android:name="hk.alipay.wallet" />
<!--百度地图app-->
<package android:name="com.baidu.BaiduMap" />
<!--高德地图app-->
<package android:name="com.autonavi.minimap" />
<!--腾讯地图app-->
<package android:name="com.tencent.map" />
<!--淘宝-->
<package android:name="com.taobao.taobao" />
<!--天猫-->
<package android:name="com.tmall.wireless" />
<!--微博-->
<package android:name="com.sina.weibo"/>
<!--脸书-->
<package android:name="com.facebook.katana"/>
<!--WhatsApp-->
<package android:name="com.whatsapp"/>
</queries>
详细变更,可参考官方文档:文章来源:https://www.toymoban.com/news/detail-534515.html
https://developer.android.com/training/basics/intents/package-visibility#system-packages-visible-automatically文章来源地址https://www.toymoban.com/news/detail-534515.html
到了这里,关于Android 11及以上出现 Intent.resolveActivity(context.getPackageManager()) == null的处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!