You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在.NET MAUI中使用UsageStatsManager遇权限拒绝问题求助

.NET MAUI中PACKAGE_USAGE_STATS权限问题解决方法

问题核心

android.permission.PACKAGE_USAGE_STATS属于Android特殊权限,无法通过MAUI常规的Permissions.RequestAsync流程获取,必须引导用户手动在系统设置中开启权限。常规权限检查API也无法准确识别该权限的授予状态,需要直接调用Android原生API验证。

解决方案步骤

1. 替换权限检查逻辑

使用Android原生UsageStatsManager判断是否已获得权限,替代MAUI的CheckStatusAsync:

using Android.App.Usage;
using Android.Content;
using Android.OS;

private bool HasUsageStatsPermission()
{
    if (DeviceInfo.Platform != DevicePlatform.Android) return false;

    var usageStatsManager = Android.App.Application.Context.GetSystemService(Context.UsageStatsService) as UsageStatsManager;
    if (usageStatsManager == null) return false;

    var calendar = Java.Util.Calendar.Instance;
    calendar.Add(Java.Util.CalendarField.Year, -1);
    var startDate = calendar.TimeInMillis;
    var endDate = Java.Lang.JavaSystem.CurrentTimeMillis();

    var queryUsageStats = usageStatsManager.QueryUsageStats(UsageStatsInterval.Yearly, startDate, endDate);
    return queryUsageStats != null && queryUsageStats.Any();
}

2. 引导用户跳转到系统设置页面

当权限未授予时,直接打开“有权查看使用情况的应用”设置页面,让用户手动开启:

private async Task<bool> CheckAndRequestUsageStatsPermission()
{
    if (DeviceInfo.Platform != DevicePlatform.Android) return false;

    if (HasUsageStatsPermission())
        return true;

    await Shell.Current.DisplayAlert("需要权限", "请在系统设置中开启应用的\"查看应用使用情况\"权限", "去设置");

    // 跳转到对应的系统设置页面
    var intent = new Intent(Android.Provider.Settings.ActionUsageAccessSettings);
    intent.AddFlags(ActivityFlags.NewTask);
    Android.App.Application.Context.StartActivity(intent);

    return false;
}

3. 确认AndroidManifest配置

你的AndroidManifest.xml配置已经正确添加了权限,无需修改:

<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>

注意事项

  • 该权限仅在Android 5.0(API 21)及以上版本可用,你的minSdkVersion=21符合要求。
  • 用户跳转设置开启权限后,返回应用需要重新检查权限状态,可以在页面Appearing事件中再次调用HasUsageStatsPermission验证。

内容的提问来源于stack exchange,提问作者piferrari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:53:31