Android 11 Intent.resolveActivity(context.getPackageManager()) == null
在调用系统相机时候,一般会先做下判断,相机是否正常使用。以下代码在android 11以下是没有问题,只要相机是正常。android 11之后直接返回null。
//打开相机录制视频
Intent captureIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
//判断相机是否正常。
if (captureIntent .resolveActivity(context.getPackageManager()) != null) {
....
}
解决方法
方法1 在清单文件中添加queries标签。Tip:启动第三方的app也是通过这种方式。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.lib.image">
<!-- 判断相机是否 可以使用 如果不加以下配置 那么captureIntent.resolveActivity(context.getPackageManager())==null -->
<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)) {
//相机可用
}
打开第三方app
比如打开微信、微博、facebook、whatsapp
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxx.xxx">
<queries>
<package android:name="com.tencent.mm"/>
<package android:name="com.sina.weibo"/>
<package android:name="com.facebook.katana"/>
<package android:name="com.whatsapp"/>
</queries>
</manifest>