在.NET MAUI(.NET 6)中获取Android API 27运行进程列表遇空值问题
解决.NET MAUI(.NET 6)Android API27获取运行进程列表返回null的问题
针对你遇到的问题,以下是排查和解决的步骤:
1. 修正类型转换逻辑
原代码中使用as List<ActivityManager.RunningAppProcessInfo>进行类型转换,若RunningAppProcesses返回的IList<ActivityManager.RunningAppProcessInfo>实例并非List类型,转换会直接返回null。在.NET MAUI中,该返回值的实现类型可能与Xamarin不同,建议改用ToList()方法安全转换:
// 使用Android应用全局上下文获取服务 var activityManager = (ActivityManager)Android.App.Application.Context.GetSystemService(Context.ActivityService); // 转换为List,避免null引用异常 var runningAppProcesses = activityManager.RunningAppProcesses?.ToList();
2. 确认权限配置
确保在Platform/Android/AndroidManifest.xml中添加必要权限:
<uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
3. 处理完整进程列表的权限限制(可选)
如果需要获取其他应用的完整进程信息,Android API23及以上需额外申请PACKAGE_USAGE_STATS权限,该权限无法通过常规运行时申请,需引导用户到系统设置开启:
if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.M) { var intent = new Intent(Android.Provider.Settings.ActionUsageAccessSettings); intent.AddFlags(ActivityFlags.NewTask); Android.App.Application.Context.StartActivity(intent); }
额外说明
从Android 5.0(API21)开始,普通应用能获取的进程信息已被系统限制,仅能获取自身进程及部分系统进程。若你在Xamarin中能获取更多进程,可能是当时的应用拥有特殊权限或运行在更低API版本的设备上。
内容的提问来源于stack exchange,提问作者aquari93
相关产品推荐
相关产品推荐

