1,在AndroidManifest.xml中配置权限
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions"/>
2,跳转用户授权界面
public boolean checkUsageStats() {
AppOpsManager appOpt = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE);
int mode = appOpt.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, android.os.Process.myUid(), mContext.getPackageName());
boolean isGranted = mode == AppOpsManager.MODE_ALLOWED;
return isGranted;
}
private void checkUsageStatsPermission() {
if (!checkUsageStats()) {
showToast("请打开权限以获取系统导航状态");
startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
}
}
3,获取正在运行的程序
public boolean getSystemNaviState() {
String currentApp = "NULL";
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
UsageStatsManager usm = (UsageStatsManager) mContext.getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time);
if (appList != null && appList.size() > 0) {
SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();
for (UsageStats usageStats : appList) {
mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
}
if (mySortedMap != null && !mySortedMap.isEmpty()) {
currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
}
}
} else {
ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses();
currentApp = tasks.get(0).processName;
}
Log.e("adapter", "Current App in foreground is: " + currentApp);
if (currentApp.contains("com.autonavi")) {
return true;
}
return false;
}