Android L獲取前臺應用的包名
背景
前一段時間發現android5.0以后的手機發現我們的APP懸浮窗獲取前臺應用的名稱不起作用了,以前我們的作法如下:
</span>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;
}</pre>
現在發現上面的lr.size一直是1, 也就是只能查找到自己。 最后google發現API 21 新增的接口 android.app.usage , 這個 API 比已棄用的 getRecentTasks( ) 方法提供了更詳細信息。
實現
通過查看官網文檔說明實現如下:
</span>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 的訪問。
</span>來自:http://hujiandong.com/2015/10/20/android_foregound_app/
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!