android 5.0以上獲取前臺應用的包名
背景
前一段時間發現android5.0以後的手機發現我們的APP懸浮窗獲取前臺應用的名稱不起作用了,以前我們的作法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public String getForegroundApp(Context context) { ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<RunningAppProcesInfo> lr = am.getRunningAppProcesses(); if (lr == null) { return null; } for (RunningAppProcessInfo ra : lr) { if (ra.importance == RunningAppProcessInfo.IMPORTANCE_VISIBLE || ra.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { return ra.processName; } } return null; } |
現在發現上面的lr.size一直是1, 也就是隻能查詢到自己。 最後google發現API 21 新增的介面android.app.usage, 這個 API 比已棄用的 getRecentTasks( ) 方法提供了更詳細資訊。
實現
通過檢視官網文件說明實現如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
private String getForegroundApp() { long ts = System.currentTimeMillis(); List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST,ts-2000, ts); if (queryUsageStats == null || queryUsageStats.isEmpty()) { return null; } UsageStats recentStats = null; for (UsageStats usageStats : queryUsageStats) { if(recentStats == null || recentStats.getLastTimeUsed() < usageStats.getLastTimeUsed()){ recentStats = usageStats; } } return recentStats.getPackageName; } |
許可權要求
要使用這個API,首先你必須在你的 mainifest 檔案宣告 “android.permission.PACKAGE_USAGE_STATS” 許可權。然後在 設定 > 安全 > 有權檢視使用情況的應用 裡,使用者必須允許該 app 的訪問。
相關文章
- Flutter獲取IOS bundle id和Android應用包名FlutteriOSAndroid
- android 6.0下獲取當前呼叫介面的包名Android
- android檢視當前應用的的包名和activityAndroid
- Android探索之旅 | 用ADB獲取應用APK名AndroidAPK
- Android中獲取應用程式(包)的資訊-----PackageManager的使用(一)AndroidPackage
- Android中獲取應用程式(包)的大小-----PackageManager的使用(二)AndroidPackage
- android應用開發—獲取當前執行的services列表Android
- Android 多包名打包應用Android
- 簡單獲取安卓應用簽名(微信開放平臺)安卓
- Android獲取應用基本資訊Android
- 獲取當前會話的trc檔名會話
- 程式獲取Android簽名Android
- iOS 獲取當前連結WiFi名iOSWiFi
- eclipse,android studio 簽名打包,獲取MD5, SHA1(應用的簽名)EclipseAndroid
- 控制檯應用程式獲取計算機名計算機
- Android獲取當前桌面桌布Android
- Android判斷當前棧頂Activity的包名Android
- 國內主要Android應用市場包名大全Android
- 判斷當前應用程式處於前臺還是後臺 ANDROIDAndroid
- Android中獲取當前位置資訊Android
- android如何獲取證書籤名?Android
- Android應用鎖之獲取棧頂ActivityAndroid
- 用js獲取當前月份的天數JS
- Android獲取當前Activity的螢幕截圖Android
- Android 應用簽名Android
- Appium自動獲取 Android 裝置 id 和包名等資訊(python)APPAndroidPython
- Android-獲取app包資訊異常AndroidAPP
- WPF 前臺觸發器實時獲取當前時間觸發器
- android利用adb命令,獲取當前介面(當前Task的棧頂).Android
- Android 通過名稱獲取資源IDAndroid
- 獲取相應副檔名的ContentType型別型別
- Android 5.0以上系統常用控制元件著色指南Android控制元件
- Android應用重簽名Android
- Android逆向之旅---Android中如何獲取在非Root裝置中獲取應用隱私資料Android
- Android12以上獲取裝置網路訊號資料Android
- 為Android 5.0設計Material風格的應用程式Android
- android粘性廣播主動獲取當前值Android
- Android Service獲取當前位置(GPS+基站)Android