UsageStatsService不会为Android 6设备返回事件

时间:2019-06-06 23:07:05

标签: android xamarin.android usagestatsmanager

我的应用需要使用UsageStatsService才能收集用户每天使用的应用的指标。由于某些原因,UsageStatsService似乎没有返回某些设备的事件,我也不知道为什么。唯一的共同因素似乎是android设备的版本。 Android 7、8和9似乎可以正常工作,而Android 6似乎不起作用。

注意:该项目使用的是Android 9(28)的目标版本,以及android 5(21)的最低android版本。

我尝试清理项目,卸载应用程序,清除其缓存/存储,更改应用程序的目标版本-我一直空着。

我正在请求主要活动的OnStart许可:

if (CheckSelfPermission(Android.Manifest.Permission.PackageUsageStats) != Permission.Granted)
{
    RequestPermissions(new string[] { Android.Manifest.Permission.PackageUsageStats }, 2);
    Log.Info(_tag, "OnStart: Requesting PackageUsageStats permission");
}

我的清单也有列出的权限:

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

用户加载后,它将使用以下命令检查是否已授予应用使用情况统计信息权限

public static bool GetUsageDataPermission(Context context, bool showPrompt = false)
{
    AppOpsManager opsManager;
    AppOpsManagerMode mode;
    AlertDialog.Builder builder;

    // Check usage stats permissions
    opsManager = (AppOpsManager)context.GetSystemService(Context.AppOpsService);
    mode = opsManager.CheckOpNoThrow("android:get_usage_stats", Android.OS.Process.MyUid(), context.PackageName);

    // Prompt if we need too
    if (mode != AppOpsManagerMode.Allowed)
    {
        if (showPrompt)
        {
            builder = new AlertDialog.Builder(context);
            builder.SetMessage("In order for this app to work on your device, you must grant it usage stats permission. Press OK and we will take you to the setting, otherwise press Cancel.");
            builder.SetPositiveButton("Ok", delegate (object dialog, DialogClickEventArgs args)
            {
                context.StartActivity(new Intent(Android.Provider.Settings.ActionUsageAccessSettings));
            });
            builder.SetNegativeButton("Cancel", delegate (object dialog, DialogClickEventArgs args)
            {
                if (dialog != null && dialog is Dialog)
                    ((Dialog)dialog).Dismiss();
            });
            builder.Show();
        }

        return false;
    }

    return true;
}
}

,最后尝试使用以下命令获取统计信息:

if (_usageStatsManager == null)
    _usageStatsManager = (UsageStatsManager)GetSystemService(Context.UsageStatsService);

systemTime = Java.Lang.JavaSystem.CurrentTimeMillis();
beginTime = systemTime - 1000;
endTime = systemTime + 1000;

var test1 = _usageStatsManager.QueryEvents(beginTime, endTime);
if (test1.HasNextEvent)
    Log.Debug(_tag, $"Test 1 had events");

var test2 = _usageStatsManager.QueryUsageStats(UsageStatsInterval.Daily, beginTime, endTime);
if (test2.Count > 0)
    Log.Debug(_tag, $"Test 2 had events");

var test3 = _usageStatsManager.QueryAndAggregateUsageStats(beginTime, endTime);
if (test3.Count > 0)
    Log.Debug(_tag, $"Test 3 had events");

由于某种原因,所有这三个结果均在我的android 9设备上返回结果,但在我的android 6设备上却未返回结果。我在logcat中没有收到任何错误,并且该应用程序没有崩溃。任何有关可能发生的情况的指针将不胜感激。

0 个答案:

没有答案