Android判斷當(dāng)前棧頂Activity的包名代碼示例
有時(shí)候,我們想做一個(gè)功能需求的時(shí)候,在網(wǎng)上找相關(guān)資料,總是找不到想要的,所以我就想到了用博客來(lái)記錄和整理自己發(fā)現(xiàn)的新東西,話不多說(shuō),直接擼代碼~
//判斷當(dāng)前是不是桌面
public static Boolean isHome(Context context) {
String topPackageName = getTopActivityName(context);
//此處做了判斷如果得到的是null的話就返回一個(gè)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的名字,注意此處要進(jìn)行判斷,Android在5.0以后Google把getRunningTasks的方法給屏蔽掉了,所以要分開(kāi)處理
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) {
//此處要判斷用戶的安全權(quán)限有沒(méi)有打開(kāi),如果打開(kāi)了就進(jìn)行獲取棧頂Activity的名字的方法
//當(dāng)然,我們的要求是如果沒(méi)打開(kāi)就不獲取了,要不然跳轉(zhuǎn)會(huì)影響用戶的體驗(yàn)
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;
}
}
//判斷用戶對(duì)應(yīng)的安全權(quán)限有沒(méi)有打開(kāi)
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;
}
//此處是跳轉(zhuǎn)安全權(quán)限的跳轉(zhuǎn)代碼,如果你判斷用戶沒(méi)有開(kāi)啟權(quán)限的話可以選擇跳轉(zhuǎn),此處標(biāo)明~~~
//Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
//startActivity(intent);
總結(jié)
以上就是本文關(guān)于Android判斷當(dāng)前棧頂Activity的包名代碼示例的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專(zhuān)題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
Android UI設(shè)計(jì)系列之HTML標(biāo)簽實(shí)現(xiàn)TextView設(shè)置中文字體加粗效果(6)
這篇文章主要介紹了Android UI設(shè)計(jì)系列之使用HTML標(biāo)簽,實(shí)現(xiàn)在TextView中對(duì)中文字體加粗的效果,具有一定的實(shí)用性和參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06
Android 實(shí)現(xiàn)高斯模糊效果且兼容低版本
這篇文章主要介紹了Android 實(shí)現(xiàn)高斯模糊效果且兼容低版本的相關(guān)資料,本文圖文并茂介紹的非常詳細(xì),需要的朋友可以參考下2016-09-09
android鬧鈴簡(jiǎn)單實(shí)現(xiàn)
本文給大家分享的是一段簡(jiǎn)單的實(shí)現(xiàn)Android系統(tǒng)的鬧鈴的代碼,非常實(shí)用,想做Android開(kāi)發(fā)的小伙伴們可以參考下。2015-03-03
Android 創(chuàng)建與解析XML(四)——詳解Pull方式
本篇文章主要介紹了Android創(chuàng)建與解析XML(二)——詳解Pull方式,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2016-11-11
Flutter實(shí)現(xiàn)心動(dòng)的動(dòng)畫(huà)特效
為了追求更好的用戶體驗(yàn),有時(shí)候我們需要一個(gè)類(lèi)似心跳一樣跳動(dòng)著的控件來(lái)吸引用戶的注意力。本文將利用Flutter實(shí)現(xiàn)這一動(dòng)畫(huà)特效,需要的可以參考一下2022-04-04
詳解Android中ViewPager的PagerTabStrip子控件的用法
這篇文章主要介紹了Android中ViewPager的PagerTabStrip子控件的用法,PagerTabStrip與PagerTitleStrip的用法基本相同,文中舉了兩個(gè)詳細(xì)的例子,需要的朋友可以參考下2016-03-03
android讀寫(xiě)sd卡操作寫(xiě)入數(shù)據(jù)讀取數(shù)據(jù)示例
這篇文章主要介紹了android讀寫(xiě)sd卡操作,示例實(shí)現(xiàn)了寫(xiě)入數(shù)據(jù)讀取數(shù)據(jù)的功能,大家參考使用吧2014-01-01
Android自定義布局實(shí)現(xiàn)仿qq側(cè)滑部分代碼
這篇文章主要為大家詳細(xì)介紹了自定義布局實(shí)現(xiàn)仿qq側(cè)滑Android部分代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03

