Android 获取当前屏幕运行的 App 包名
学习笔记作者:admin日期:2025-06-04点击:6
摘要:介绍如何在 Android 设备上获取当前屏幕正在运行的应用程序的包名,包括不同 API 版本的实现方式和注意事项。
Android 获取当前屏幕运行的 App 包名
在 Android 开发中,获取当前屏幕正在运行的应用程序的包名(即前台应用的包名)需要根据不同的 Android 版本采取不同的方法。由于 Android 系统对权限和隐私的保护逐步加强,尤其是从 Android 5.0(API 21)开始,直接获取前台应用的信息变得更加严格。
1. Android 5.0(API 21)及以上版本
从 Android 5.0 开始,ActivityManager.getRunningTasks()
方法被废弃,无法直接获取前台应用信息。取而代之的是通过 UsageStatsManager
来获取前台应用的包名。
实现步骤:
- 添加权限声明:
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions"/>>
- 引导用户授予权限:
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS); startActivity(intent);
- 获取前台应用包名:
public String getForegroundAppPackageName(Context context) { UsageStatsManager usageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE); long currentTime = System.currentTimeMillis(); List<UsageStats> stats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, currentTime - 1000 * 60, currentTime); if (stats != null && !stats.isEmpty()) { UsageStats recentStats = null; for (UsageStats usageStats : stats) { if (recentStats == null || usageStats.getLastTimeUsed() > recentStats.getLastTimeUsed()) { recentStats = usageStats; } } if (recentStats != null) { return recentStats.getPackageName(); // 返回前台应用的包名 } } return null; // 如果未找到前台应用,返回 null }
2. Android 4.4(API 19)及以下版本
在 Android 4.4 及以下版本中,可以使用 ActivityManager.getRunningTasks()
方法获取前台应用的包名。但由于该方法已被废弃,不建议在新项目中使用。
实现步骤:
- 获取前台应用包名:
public String getForegroundAppPackageName(Context context) { ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); if (activityManager != null) { List<ActivityManager.RunningTaskInfo> taskInfo = activityManager.getRunningTasks(1); if (taskInfo != null && !taskInfo.isEmpty()) { return taskInfo.get(0).topActivity.getPackageName(); // 返回前台应用的包名 } } return null; }
3. 其他注意事项
- 权限限制:从 Android 10(API 29)开始,Google 进一步限制了后台应用访问前台应用信息的能力。即使是
UsageStatsManager
,也需要用户明确授权。 - 隐私保护:获取前台应用信息可能涉及用户隐私,因此在实际开发中应谨慎使用,并确保符合相关法律法规(如 GDPR)。
- 替代方案:如果只是为了监控特定应用的行为,可以考虑与目标应用进行协作,通过广播、服务绑定等方式实现信息共享。
总结
对于 Android 5.0 及以上版本,推荐使用 UsageStatsManager
来获取前台应用的包名,但需要用户手动授予权限。对于 Android 4.4 及以下版本,可以使用 ActivityManager.getRunningTasks()
,但该方法已被废弃。开发时需注意权限管理以及隐私合规性,避免因不当使用导致应用被下架或用户投诉。