Android应用退到后台,点击悬浮窗返回应用


方案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);

缺点:部分手机拉起会慢几秒(测试效果与微信一样 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值