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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!