- 應(yīng)用鎖簡單介紹
本文僅討論如何獲得最近運(yùn)行應(yīng)用
這里的應(yīng)用鎖的功能是指的是禁止打開某些特定的應(yīng)用,或者打開后也會(huì)自動(dòng)關(guān)閉。
簡單的介紹一下應(yīng)用鎖實(shí)現(xiàn)的方式:后臺(tái)開一個(gè)Service辆脸,是Service里開一個(gè)Runnable,在實(shí)現(xiàn)中每過幾秒檢測(cè)當(dāng)前應(yīng)用是否可以打開挎扰。 - 頂層應(yīng)用
- 5.0以下可以直接獲取頂層應(yīng)用乐尊。
需要聲明<uses-permission android:name="android.permission.GET_TASKS"/>
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasksInfo = activityManager.getRunningTasks(1);
if (!ListUtils.isEmpty(tasksInfo)) {
retuString = tasksInfo.get(0).topActivity.getPackageName();
}
- 5.0以上需要
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"></uses-permission>
這個(gè)權(quán)限雖然說是系統(tǒng)權(quán)限霉旗,但是可以用下面的方法申請(qǐng)到澄步。
/***
* 有沒有這個(gè)設(shè)置,必須要開啟這個(gè)設(shè)置才能得到最近任務(wù)
* @param pContext 上下文
* @return true有false沒有
*/
public static boolean isUsageOption(Context pContext) {
PackageManager packageManager = pContext.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;
}
/***
* 當(dāng)前的狀態(tài)
* @param pContext 上下文
* @return true開啟false關(guān)閉
*/
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static boolean isUsageSwitch(Context pContext) {
long ts = System.currentTimeMillis();
UsageStatsManager usageStatsManager = (UsageStatsManager) pContext.getApplicationContext()
.getSystemService(Context.USAGE_STATS_SERVICE);
List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(
UsageStatsManager.INTERVAL_BEST, 0, ts);
if (queryUsageStats == null || queryUsageStats.isEmpty()) {
return false;
}
return true;
}
/***
* 打開權(quán)限界面
* @param pContext 上下文
* @param requestCode 請(qǐng)求碼
*/
public static void openUsageActivity(Context pContext, int requestCode) {
if (pContext == null) {
throw new RuntimeException(UsageStatsUtils.class.getName() + " context null");
}
Intent intent = new Intent(
Settings.ACTION_USAGE_ACCESS_SETTINGS);
if (pContext instanceof Activity) {
((Activity) pContext).startActivityForResult(intent, requestCode);
}
}
申請(qǐng)到權(quán)限后才能使用下面的方法獲取最近任務(wù)目锭。(但不是很準(zhǔn)確,如果在設(shè)定的時(shí)間內(nèi)沒有任何操作纷捞,那么取到的最任務(wù)為空)痢虹。
UsageStatsManager usm = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_BEST, time - 5 * 1000, time);//檢查5秒內(nèi)的應(yīng)用情況
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()) {
retuString = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
}
}
當(dāng)前檢測(cè)到當(dāng)前應(yīng)用允許運(yùn)行時(shí),可以執(zhí)行以下操作打開默認(rèn)桌面主儡。
```
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME);
homeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(homeIntent);