Android L獲取前臺應用的包名

jopen 9年前發布 | 27K 次閱讀 Android L Android開發 移動開發

背景


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