簡體   English   中英

如何獲取當前前台活動的 package 名稱?

[英]How to get the package name of the current foreground activity?

我查看了類似的問題,每個答案都有一個共同點,那就是它們不適用於大於 21 的 API。

這個片段只適用於 20 或更低的 API:

ActivityManager am = (ActivityManager) getApplicationContext().getSystemService(Activity.ACTIVITY_SERVICE);
String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName();

然后是使用UsageStats的那個。 奇怪的是,盡管這是關於 SO 最常發布的答案,但此方法僅適用於單個 API,即 21,即 Android 5.0。 它甚至不適用於 Android 5.1。

有沒有一種現代的方式有效? 謝謝閱讀。

以下返回當前頂部 package 的 Observable 的方法可能有效:

    public Observable<String> topPackageNameObservable() {
    return Observable.fromCallable(() -> {
        String topPackageName = "";
        ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                UsageStatsManager mUsageStatsManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
                List<UsageStats> stats =
                        mUsageStatsManager.queryUsageStats(
                                UsageStatsManager.INTERVAL_DAILY,
                                System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1),
                                System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1));
                if (stats != null) {
                    SortedMap<Long, UsageStats> mySortedMap = new TreeMap<>();
                    for (UsageStats usageStats : stats) {
                        mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
                    }
                    if (!mySortedMap.isEmpty()) {
                        topPackageName = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
                    }
                } else {
                    topPackageName = mActivityManager.getRunningAppProcesses().get(0).processName;
                }
            } else {
                topPackageName = mActivityManager.getRunningTasks(1).get(0).topActivity.getPackageName();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return topPackageName;
    });

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM