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

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

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注