0

我似乎找不到任何好的资源来展示如何在 c# 中使用 UsageStatsManager 来获取所有正在运行的应用程序的列表。我已经看到活动管理器和运行任务在 Lollipop 之后的版本中不再工作,我正在尝试创建一个需要此信息的任务管理器应用程序。

我用过:

        UsageStatsManager usageStatsManager = (UsageStatsManager)context.ApplicationContext.GetSystemService("usagestats");
        long time = TimeUtils.CurrentTimeMillis();
        long beginTime = time - 1000 * 10;


        List<UsageStats> stats = usageStatsManager.QueryUsageStats(UsageStatsInterval.Daily, beginTime, time).ToList<UsageStats>();

        foreach (var item in stats)
        {
            serviceInfo.Add(item.PackageName);
        }

使用 TimeUtils 作为:

    public class TimeUtils
    {
        private static readonly DateTime Jan1st1970 = new DateTime
        (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

        public static long CurrentTimeMillis()
        {
            return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
        }
    }

这将返回 null,我不确定这是否可能是权限错误?我正在使用 Package_Usage_stats 的用户权限:

使用权限 android:name="android.permission.PACKAGE_USAGE_STATS"

任何帮助将非常感激

4

1 回答 1

0

使用api 时,即使权限已被贴花UsageStatsManager,设备用户仍需要通过设置应用授予权限。

检查文档:
https ://developer.android.com/reference/android/app/usage/UsageStatsManager

您可以使用以下代码引导用户打开具有使用访问权限的应用设置页面。

btn.Click += (sender, e) =>
{
    StartActivity(new Intent(Android.Provider.Settings.ActionUsageAccessSettings));
};
于 2020-11-06T14:47:58.263 回答