需實時監控手機上任意 App 的打開情況,獲取當前最上層應用的包名。
// 權限:AndroidManifest.xml
<uses-permission android:name="android.permission.GET_TASKS"/>
// 核心代碼
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);
ComponentName top = tasks.get(0).topActivity;
String pkg = top.getPackageName(); // 當前前台 App 包名
Log.i("Monitor", "Foreground: " + pkg);
放入定時器或循環中即可輪詢監聽。
getRunningTasks 在 Android 5.0 (API 21) 起僅返回調用者自身任務,不再提供其他應用信息。Google 為保護隱私徹底封殺此接口。
TYPE_WINDOW_STATE_CHANGED 事件,可實時捕獲窗口變化獲取包名,但需用戶開啟無障礙服務,審核嚴格。getRunningTasks 理解原理即可。核心提示:沒有完全無感、無權限、實時的通用方案,一切以用戶隱私授權為前提。