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

来源:互联网 发布:lol怎么刷金币软件 编辑:程序博客网 时间:2024/06/01 19:50

前言

开启服务,监视正在运行的应用。这个在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 0
原创粉丝点击