android获取当前正在运行的栈顶的应用包名

思路是获取当前正在运行的程序包名,判断是否自己想要的包名,然后进行一系列操作

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

if (packageName != null && packageName.equals("包名")) {
    //......如果要在这里停止含有定时执行的服务,则在停止之前需要先取消该定时器
}


可以通过 ActivityManager 的 getRunningTasks() 方法获取任务栈信息,判断栈顶的任务是否属于目标应用,来判断目标应用是否正在运行。如果目标应用正在运行,则通过 Intent.FLAG_ACTIVITY_REORDER_TO_FRONT 标志将其置顶;如果目标应用运行,则通过 Intent.FLAG_ACTIVITY_NEW_TASK 标志打开它。下面是一个示例代码: ``` public void openOrTopApp(Context context, String packageName) { ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> runningTasks = activityManager.getRunningTasks(1); if (runningTasks != null && !runningTasks.isEmpty()) { ActivityManager.RunningTaskInfo taskInfo = runningTasks.get(0); ComponentName componentName = taskInfo.topActivity; if (componentName.getPackageName().equals(packageName)) { // 目标应用正在运行,将其置顶 Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.setComponent(componentName); intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); context.startActivity(intent); } else { // 目标应用运行,打开它 Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName); if (intent != null) { intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } } } } ``` 其中,Context 是应用的上下文,packageName 是目标应用包名。函数通过 ActivityManager.getRunningTasks() 获取当前栈顶的任务信息,然后判断其包名是否与目标应用一致。如果一致,说明目标应用正在运行,将其置顶;如果不一致,说明目标应用运行,打开它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值