Android判斷當前棧頂Activity的包名
本人第一次寫部落格,目的就是為了記錄自己的一步步成長,肯定有想的不周到的地方,希望大家批評指教~~
有時候,我們想做一個功能需求的時候,在網上找相關資料,總是找不到想要的,所以我就想到了用部落格來記錄和整理自己發現的新東西,話不多說,直接擼程式碼~
//判斷當前是不是桌面
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檢視當前應用的的包名和activityAndroid
- android利用adb命令,獲取當前介面(當前Task的棧頂).Android
- android判斷當前系統的語言Android
- Android 判斷當前系統語言Android
- Android 判斷當前的介面是否是桌面的方法Android
- 判斷Android 當前版本是否為debug版本Android
- Android判斷當前裝置是否設定了代理Android
- Android 用ping的方法判斷當前網路是否可用Android
- Android應用鎖之獲取棧頂ActivityAndroid
- 舒服的判斷當前應用是否處於前臺
- 判斷當前應用程式處於前臺還是後臺 ANDROIDAndroid
- android 6.0下獲取當前呼叫介面的包名Android
- Android獲取當前Activity的螢幕截圖Android
- Android檢測網路狀態,判斷當前網路是否可用Android
- JS判斷當前裝置是 PC IOS AndriodJSiOS
- jQuery判斷當前元素是第幾個元素jQuery
- Android 判斷當前執行緒是否是主執行緒的兩種方法Android執行緒
- javascript如何判斷當前瀏覽器是否支援cookieJavaScript瀏覽器Cookie
- Python判斷當前使用者是否是rootPython
- Android 必知必會 - 根據包名判斷 App 執行狀態AndroidAPP
- Android 程式設計下判斷當前裝置是手機還是平板Android程式設計
- JavaScript判斷當前裝置和瀏覽器型別JavaScript瀏覽器型別
- 如何判斷當前瀏覽器是否支援html5瀏覽器HTML
- 判斷當前瀏覽器是不是微信瀏覽器瀏覽器
- 判斷當前viewcontroller是否是某個特定類ViewController
- 應用層和驅動如何判斷當前的啟動模式模式
- 【Android】使用ConnectivityManager與NetworkInfo實現判斷當前網路環境是否可用Android
- JS在瀏覽器中判斷當前網路狀態JS瀏覽器
- javascript判斷當前瀏覽器是不是微信瀏覽器JavaScript瀏覽器
- 自制懸浮框,愉快地檢視棧頂 Activity
- 判斷當前使用者是否為系統管理員的例項
- android 5.0以上獲取前臺應用的包名Android
- js如何判斷當前瀏覽器是否是谷歌瀏覽器JS瀏覽器谷歌
- 帝國CMS利用PHP判斷當前頁面是否為首頁PHP
- 用程式碼判斷當前系統是否支援某個版本的feature
- js實現的判斷當前瀏覽器是否flash程式碼例項JS瀏覽器
- MySQL判斷表名是否存在MySql
- 地圖演算法(一):判斷當前點是不是在該線上地圖演算法