91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android判斷當前棧頂Activity的包名代碼示例

發布時間:2020-09-14 14:50:08 來源:腳本之家 閱讀:273 作者:KevinMoJ 欄目:移動開發

有時候,我們想做一個功能需求的時候,在網上找相關資料,總是找不到想要的,所以我就想到了用博客來記錄和整理自己發現的新東西,話不多說,直接擼代碼~

//判斷當前是不是桌面 
public static Boolean isHome(Context context) {
	String topPackageName = getTopActivityName(context);
	//此處做了判斷如果得到的是null的話就返回一個true 
	return topPackageName == null ? true : getHomesPackageName(context).contains(topPackageName);
}
//得到桌面的包名,包括第三方桌面 
private static List<String> getHomesPackageName(Context context) {
	List<String> homePackageNames = new ArrayList<>();
	PackageManager packageManager = context.getPackageManager();
	Intent intent = new Intent(Intent.ACTION_MAIN);
	intent.addCategory(Intent.CATEGORY_HOME);
	List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
	for (ResolveInfo info : resolveInfo) {
		homePackageNames.add(info.activityInfo.packageName);
	}
	return homePackageNames;
}
//得到棧頂Activity的名字,注意此處要進行判斷,Android在5.0以后Google把getRunningTasks的方法給屏蔽掉了,所以要分開處理 
private static String getTopActivityName(Context context) {
	String topActivityPackageName;
	ActivityManager manager = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);
	if (Build.VERSION.SDK_iNT >= Build.VERSION_CODES.LOLLIPOP) {
		//此處要判斷用戶的安全權限有沒有打開,如果打開了就進行獲取棧頂Activity的名字的方法 
		//當然,我們的要求是如果沒打開就不獲取了,要不然跳轉會影響用戶的體驗 
		if (isSecurityPermissionOpen(context)) {
			UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
			long endTime = System.currentTimeMillis();
			long beginTime = endTime - 1000 * 60 * 2;
			UsageStats recentStats = null;
			List<UsageStats> queryUsageStats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, beginTime, endTime);
			if (queryUsageStats == null || queryUsageStats.isEmpty()) {
				return null;
			}
			for (UsageStats usageStats : queryUsageStats) {
				if (recentStats == null || recentStats.getLastTimeUsed() < usageStats.getLastTimeUsed()) {
					recentStats = usageStats;
				}
			}
			topActivityPackageName = recentStats.getPackageName();
			return topActivityPackageName;
		} else {
			return null;
		}
	} else {
		List<ActivityManager.RunningTaskInfo> taskInfos = manager.getRunningTasks(1);
		if (taskInfos.size() > 0) 
		      topActivityPackageName = taskInfos.get(0).topActivity.getPackageName(); else 
		      return null;
		return topActivityPackageName;
	}
}
//判斷用戶對應的安全權限有沒有打開 
private static Boolean isSecurityPermissionOpen(Context context) {
	long endTime = System.currentTimeMillis();
	UsageStatsManager usageStatsManager = (UsageStatsManager) context.getApplicationContext().getSystemService("usagestats");
	List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, 0, endTime);
	if (queryUsageStats == null || queryUsageStats.isEmpty()) {
		return false;
	}
	return true;
}
//此處是跳轉安全權限的跳轉代碼,如果你判斷用戶沒有開啟權限的話可以選擇跳轉,此處標明~~~ 
//Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS); 
//startActivity(intent);

總結

以上就是本文關于Android判斷當前棧頂Activity的包名代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥滨县| 分宜县| 康保县| 澳门| 五常市| 新邵县| 保靖县| 和龙市| 金华市| 大庆市| 兴仁县| 秭归县| 灵武市| 石门县| 汽车| 南雄市| 靖远县| 綦江县| 积石山| 沙河市| 阜阳市| 常德市| 仪陇县| 新营市| 扎鲁特旗| 阜南县| 临江市| 甘南县| 竹北市| 贡觉县| 襄樊市| 阿图什市| 岳普湖县| 镇远县| 吉林省| 万荣县| 中山市| 建平县| 昆明市| 乌拉特前旗| 长沙县|