处理 Android 11 及更高版本中出现的 Intent.resolveActivity(context.getPackageManager()) == null 的情况。

访客 188 0

1、使用场景: 在App中调用系统相机进行拍照并设置图片。

问题描述:在目标SDK版本大于等于Android 11的情况下,以下代码`captureIntent.resolveActivity(context.getPackageManager())`返回了null。

```java
// 拉起系统相机的Intent
Intent captureIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

// 判断相机是否正常
if (captureIntent.resolveActivity(context.getPackageManager()) != null) {
    // ...
}

// 系统环境:Android 11,targetSdkVersion == 33
``` 

4、解决方案: 4、可行的解决方案:

(1)使用系统应用时: (2)调用系统应用: (3)当需要调用系统应用时: (4)在使用系统应用的情况下: (5)执行系统应用操作时:

方案1:在清单文件中添加queries标签。

    
    
        
            
        
    
 
如果 (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)) {
    // 相机可用
} else {
    // 打开其他第三方app,比如:
} 
Android 11 版本引入了许多变更,旨在加强用户的隐私保护。以下是一些相关的变更内容:

- 微信支付SDK:``
- 支付宝支付SDK:``
- 支付宝钱包SDK:``
- 百度地图app:``
- 高德地图app:``
- 腾讯地图app 

请访问以下链接了解有关系统包自动可见性的更多信息:https://developer.android.com/training/basics/intents/package-visibility#system-packages-visible-automatically

标签: 相机 系统 地图 方案

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~