Android5.0以上版本查看应用使用情况

前言

开启服务,监视正在运行的应用。这个在Android的高版本中(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)显得比较复杂一些。在低版本中实现起来比较容易。这里介绍在5.0以上版本的实现。

Android5.0以上需要开启“有权查看使用情况的应用”

首先检测设备是否有“有权查看使用情况的应用”

private boolean isNoOption() {  
        PackageManager packageManager = getApplicationContext()  
                .getPackageManager();  
        Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);  
        List<ResolveInfo> list = packageManager.queryIntentActivities(intent,  
                PackageManager.MATCH_DEFAULT_ONLY);  
        return list.size() > 0;  
    }  

如果有“有权查看使用情况的应用”判断是否开启


private boolean isNoSwitch() {  
        long ts = System.currentTimeMillis();  
        UsageStatsManager usageStatsManager = (UsageStatsManager) getApplicationContext()  
                .getSystemService("usagestats");  
        List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(  
                UsageStatsManager.INTERVAL_BEST, 0, ts);  
        if (queryUsageStats == null || queryUsageStats.isEmpty()) {  
            return false;  
        }  
        return true;  
    }

如果没有开启,则跳转至开启界面

if (isNoOption()) {  
            buttonGuide.setOnClickListener(new OnClickListener() {  

                @Override  
                public void onClick(View v) {  
                    Intent intent = new Intent(  
                            Settings.ACTION_USAGE_ACCESS_SETTINGS);  
                    startActivity(intent);  
                }  
            });

添加权限

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

以上部分参考了Android 5.0以后版本打开“有权查看使用情况的应用”在此表示感谢

代码实现查看正在运行的应用包名

public static String getTopAppName(Context context) {
    ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    String strName = "";
    try {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            strName = getLollipopFGAppPackageName(context);
        } else {
            strName = mActivityManager.getRunningTasks(1).get(0).topActivity.getClassName();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return strName;
}


private static String getLollipopFGAppPackageName(Context ctx) {

    try {
        UsageStatsManager usageStatsManager = (UsageStatsManager) ctx.getSystemService("usagestats");
        long milliSecs = 60 * 1000;
        Date date = new Date();
        List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, date.getTime() - milliSecs, date.getTime());
        if (queryUsageStats.size() > 0) {
            Log.i("LPU", "queryUsageStats size: " + queryUsageStats.size());
        }
        long recentTime = 0;
        String recentPkg = "";
        for (int i = 0; i < queryUsageStats.size(); i++) {
            UsageStats stats = queryUsageStats.get(i);
            if (i == 0 && !"org.pervacio.pvadiag".equals(stats.getPackageName())) {
                Log.i("LPU", "PackageName: " + stats.getPackageName() + " " + stats.getLastTimeStamp());
            }
            if (stats.getLastTimeStamp() > recentTime) {
                recentTime = stats.getLastTimeStamp();
                recentPkg = stats.getPackageName();
            }
        }
        return recentPkg;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "";
}

以上知识感谢how to getTopActivity name or get current running application package name in lollipop?

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值