PackageManager.QueryIntentActivities()报错:ResolveInfoFlags相关CS1061问题排查
问题:Xamarin.Android适配API 33时
queryIntentActivities报错CS1061 API level 33中queryIntentActivities(Intent intent, int flags)已被弃用,官方要求改用接收ResolveInfoFlags参数的重载方法,但在编写Xamarin.Android代码时,Visual Studio抛出错误:
CS1061: 'PackageManager' 不包含接受第一个参数类型为'PackageManager'的'ResolveInfoFlags'定义
相关代码如下:
private bool IsThereAnAppToTakePictures() { Intent intent = new Intent(Android.Provider.MediaStore.ActionImageCapture); System.Collections.Generic.IList<ResolveInfo> availableActivities = ((int)Android.OS.Build.VERSION.SdkInt > 32) ? PackageManager.QueryIntentActivities(intent, PackageManager.ResolveInfoFlags) : PackageManager.QueryIntentActivities(intent, PackageInfoFlags.MatchDefaultOnly); return availableActivities != null && availableActivities.Count > 0; }
错误原因及修复方案
你犯了两个核心错误:
ResolveInfoFlags是枚举类型,需传递具体枚举值而非类型本身:和旧API的PackageInfoFlags.MatchDefaultOnly对应,新API应使用ResolveInfoFlags.MatchDefaultOnly。- Xamarin.Android中API 33的重载要求正确的参数类型:需确保项目SDK版本支持API 33,否则无法识别新的重载方法。
修正后的代码:
private bool IsThereAnAppToTakePictures() { Intent intent = new Intent(Android.Provider.MediaStore.ActionImageCapture); IList<ResolveInfo> availableActivities; if ((int)Android.OS.Build.VERSION.SdkInt >= 33) { // API 33+ 使用新重载,传入具体的ResolveInfoFlags枚举值 availableActivities = PackageManager.QueryIntentActivities(intent, ResolveInfoFlags.MatchDefaultOnly); } else { // 旧版本保留原有参数逻辑 availableActivities = PackageManager.QueryIntentActivities(intent, PackageInfoFlags.MatchDefaultOnly); } return availableActivities != null && availableActivities.Count > 0; }
额外注意:
- 确认项目目标框架已设置为Android 13(API 33)或更高,并安装了对应版本的Xamarin.Android SDK包。
- 若使用旧版Xamarin,需更新到支持API 33的版本才能使用
ResolveInfoFlags相关API。
内容的提问来源于stack exchange,提问作者angleUr
相关产品推荐
相关产品推荐

