Android UsageStatsManager:获取手机

时间:2018-04-09 23:40:22

标签: android android-permissions usagestatsmanager

我正在尝试在手机上获取当前正在运行的应用列表。这是我正在使用的代码:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            UsageStatsManager usm = (UsageStatsManager)this.getSystemService(Context.USAGE_STATS_SERVICE);
            long time = System.currentTimeMillis();
            List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,  time - 10000*10000, time);
            if (appList != null && appList.size() == 0) {
                Log.d("Executed app", "######### NO APP FOUND ##########" );
            }
            if (appList != null && appList.size() > 0) {
                SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();
                for (UsageStats usageStats : appList) {
                    Log.d("Executed app", "usage stats executed : " +usageStats.getPackageName() + "\t\t ID: ");
                    mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
                }
                if (mySortedMap != null && !mySortedMap.isEmpty()) {
                    String currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName();

                }
            }
        }

我在这里也设置了权限:

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

它未检测到任何应用使用情况。我已经在stackoverflow上尝试了一些其他的东西,但似乎没有任何工作。我甚至在某处读过,应用程序监控手机上运行的其他应用程序的功能已在新手机中完全删除。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

问题是您的应用程序没有android:get_usage_stats的系统权限。

您可以使用以下代码检查您是否拥有权限:

public static boolean needPermissionForBlocking(Context context){
try {
    PackageManager packageManager = context.getPackageManager();
    ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), 0);
    AppOpsManager appOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
    int mode = appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, applicationInfo.uid, applicationInfo.packageName);
    return  (mode != AppOpsManager.MODE_ALLOWED);
} catch (PackageManager.NameNotFoundException e) {
    return true;
}
}

如果您没有权限,则用户必须通过转到设置 - &gt;来启用此权限。安全性 - &GT;具有使用权限的应用,然后添加您的应用。您的代码应该可以正常工作。