首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android UsageStatsManager:获取手机上当前运行的应用列表

Android UsageStatsManager:获取手机上当前运行的应用列表
EN

Stack Overflow用户
提问于 2018-04-10 07:40:22
回答 1查看 3.7K关注 0票数 5

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

代码语言:javascript
复制
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();

                }
            }
        }

下面我也设置了权限:

代码语言:javascript
复制
<uses-permission
    android:name="android.permission.PACKAGE_USAGE_STATS"
    tools:ignore="ProtectedPermissions" />

它不会检测到任何应用程序使用情况。我在stackoverflow上尝试了一些其他的东西,但似乎都不起作用。我甚至在某个地方读到,在较新的手机中,应用程序监控手机上运行的其他应用程序的功能已经完全删除。将非常感谢您的帮助!

EN

回答 1

Stack Overflow用户

发布于 2018-04-10 08:23:10

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

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

代码语言:javascript
复制
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;
}
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49743206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档