强制安卓进入前台运行,完整代码及遇到的坑

  • ​最近突发奇想,想做一个给自己用的app,主要时做一些个人记录和强制停止无脑刷屏==。
  • 在每次解锁手机或刷视频超过一定时间,后台就把自己开发的app进入前台,提醒自己的目标及可以做其他的事有什么。
  • 网上的资料并不能完整的解决问题,然后就自己撸了一下代码。

完整代码


    Timer topTimer=null;

    public void startTopTimer(){
        stopTopTimer();
        topTimer=new Timer();
        TimerTask timerTask=new TimerTask() {
            @Override
            public void run() {
                activityInTop();
            }
        };
        topTimer.schedule(timerTask,0,500);
    }

    public void stopTopTimer(){
        if(topTimer!=null){
            topTimer.cancel();
            topTimer=null;
        }
    }

    public void activityInTop() {
        /**获取ActivityManager*/
        ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE);

        /**获得当前运行的task(任务)*/
        int nowPosition=0;
        List<ActivityManager.RunningTaskInfo> taskInfoList = activityManager.getRunningTasks(100);
        for (ActivityManager.RunningTaskInfo taskInfo : taskInfoList) {
            /**找到本应用的 task,并将它切换到前台*/
            if (taskInfo.topActivity.getPackageName().equals(getApplicationContext().getPackageName())) {
                if(nowPosition==0){
                    stopTopTimer();
                    return;
                }
                activityManager.moveTaskToFront(taskInfo.id, 0);
                Log.d(TAG, "找到本应用的 task,并将它切换到前台");
                return;
            }
            nowPosition++;
        }
        // 应用需要置顶且前台应用被关闭时,重新打开应用
        Intent intent=getPackageManager().getLaunchIntentForPackage(getPackageName());
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }

 使用

startTopTimer();

碰到的坑

应用被关闭时,service需要拉起一个新的应用

// 应用需要置顶且前台应用被关闭时,重新打开应用
        Intent intent=getPackageManager().getLaunchIntentForPackage(getPackageName());
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);

moveTaskToFront需要在应用进入后台5-7s后执行

解决方案:执行moveTaskToFront方法后,判断是否成功。不成功每间隔500ms再执行一次,直到成功为止。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值