方案1:
? ? ? ? 系统设置中找到对应的应用,打开权限“后台弹出界面”,然后直接调用startActivity()方法 ? ? ? ? 缺点:1、需要开启权限 2、部分手机没这个权限
方案2:
? ? ? ? 判断app是否在前台,如果不在前台调用moveTaskToFront()方法 ????????上代码:判断是否在前台的方法
private boolean isAppRunningForeground(Context context) {
ActivityManager activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
assert activityManager != null;
List<ActivityManager.RunningAppProcessInfo> runningAppProcessList = activityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo runningAppProcessInfo : runningAppProcessList) {
if (runningAppProcessInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND
&& runningAppProcessInfo.processName.equals(context.getApplicationInfo().processName)) {
return true;
}
}
return false;
}
将应用拉到前台 ?
private Disposable disposable;
private void moveAppToFront(Context context) {
final ActivityManager activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
assert activityManager != null;
List<ActivityManager.RunningTaskInfo> runningTasks = activityManager.getRunningTasks(100);
for (final ActivityManager.RunningTaskInfo runningTask : runningTasks) {
assert runningTask.topActivity != null;
if (runningTask.topActivity.getPackageName().equals(context.getPackageName())) {
activityManager.moveTaskToFront(runningTask.id, 0);
disposable = Observable.intervalRange(1, 5, 0, 1, TimeUnit.SECONDS).subscribe(aLong -> {
if(isAppRunningForeground(context)){
Logger.i(TAG,"moveTaskToFront success");
disposable.dispose();
}else {
Logger.i(TAG,"moveTaskToFront start");
activityManager.moveTaskToFront(runningTask.id, 0);
}
});
break;
}
}
}
缺点:一次不一定成功,需求设置拉取次数反复去moveAppToFront();如果到了自己设定的次数还没成功,就会失败(目前测试没失败过)
方案3:
? ? ? ? 参考跳转第三方应用方法,如果应用在后台调用下面方法将app拉到前台,这种方法回跳到app退到home之前到页面 ?
Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
context.startActivity(intent);
缺点:部分手机拉起会慢几秒(测试效果与微信一样?)
|