Android

Android 11及以上出现 Intent.resolveAc

2023-07-18  本文已影响0人  Sarah_Y

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 11targetSdkVersion == 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://developer.android.com/training/basics/intents/package-visibility#system-packages-visible-automatically

上一篇下一篇

猜你喜欢

热点阅读