Android 启动活动意图-如果正在运行或忽略意图,则将其放在前面

Android 启动活动意图-如果正在运行或忽略意图,则将其放在前面,android,android-intent,start-activity,Android,Android Intent,Start Activity,如果另一个应用已经在运行,我想把它带到前台,否则我什么都不想做 通常情况下,我会启动其他应用程序,如下所示: ComponentName compName = new ComponentName(packageName, activityName); Intent i = new Intent(Intent.ACTION_MAIN); i.addCategory(Intent.CATEGORY_LAUNCHER); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK

如果另一个应用已经在运行,我想把它带到前台,否则我什么都不想做

通常情况下,我会启动其他应用程序,如下所示:

ComponentName compName = new ComponentName(packageName, activityName);
Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
i.setComponent(compName);
context.startActivity(i);
如果我删除
Intent.FLAG\u ACTIVITY\u NEW\u TASK
,调用将抛出一个异常,表明不允许从非活动上下文启动没有此标志的活动


我能做我想做的吗?

首先检查应用程序是否处于运行状态

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

这将返回在后台运行的活动的程序包名称。如果所需的程序包名称正在运行,则调用intent或lse不执行任何操作。

这在所有android版本上都不起作用。。。在较新的android版本上,ypu需要使用
AccessibilityService
,这是一项特殊权限,用户必须手动为您的应用程序启用此权限。。。使用
AccessibilityService
是可能的,虽然我正在这样做,但我想找到一个解决方案,为那些不想对我的应用程序授予特殊权限的人服务