android 悬浮窗(实现开机自启动+依赖activity+隐藏主页面悬浮在桌面或者其他应用的上层)

还是需求的问题,我这边在网上去找了一些资料整理了一下

这边引用了GitHub上的一位大神的实现方式:https://github.com/yhaolpz/FloatWindow

将他的一些方法和功能实现抽离一部分功能出来

这上面为什么这样做,还是因为考虑到这个app,开机自启动之后,不要影响到其他app或者功能的使用,

开机自启动我这边,选择延迟5秒钟,再启动

    @Override
    public void onReceive(final Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
//       if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){
//           Intent is =new Intent(context, Main2Activity.class);
//           is.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//           context.startActivity(is);
//           System.out.println("启动成功" );
//           Log.i("启动成功","启动成功");
//       }

            new android.os.Handler(Looper.myLooper()).postDelayed(new Runnable() {
                @Override
                public void run() {
                    Log.i("线程启动成功","线程启动成功");
                    context.startActivity(new Intent(context,Main2Activity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
                }
            },5000);

    }

当然,你也可以选择直接启动,我这边有个重新onKeydown()去监听外接物理键盘,直接启动,会导致我的监听功能不能正常使用。我这边启动跳转的Main2Activity布局是空白的,这边只有重新onKeydown()方法。

我这边的悬浮窗也是自定义的布局和样式,以便显示自己想要的布局内容

 

 

 

 
 LinearLayout ll_main, ll_Setting;
    View inflat;


 //布局
        inflat = (View) View.inflate(getApplicationContext(), R.layout.activity_main, null);
        ll_main = inflat.findViewById(R.id.ll_main);
        ll_Setting = inflat.findViewById(R.id.ll_Setting);
      
        FloatWindow
                .with(getApplicationContext())
                .setView(inflat)
                .setWidth(Screen.width, 1f) //设置悬浮控件宽高
                .setHeight(Screen.width, 0.4f)
//                 .setX(Screen.width, 0.8f)
//                 .setY(Screen.height, 0.3f)
  /*               .setX(0)
                 .setY(240)*/
//修改刚开始显示的坐标的具体位置
                .setX(0)
                .setY(1723)
                .setMoveType(MoveType.active, 0, 0)
                // .setMoveStyle(500, new BounceInterpolator())
                .setFilter(false)
                .setViewStateListener(mViewStateListener)
                .setPermissionListener(mPermissionListener)
                .setDesktopShow(true)
                .build();

布局我就不展示出来了,我们这边只要懂得怎么去绑定就行了。找到他们的控件id和绑定就行。

要实现悬浮,我们就要把下面的类和方法的代码复制过来。

    private PermissionListener mPermissionListener = new PermissionListener() {
        @Override
        public void onSuccess() {
            Log.d(TAG, "onSuccess");
        }

        @Override
        public void onFail() {
            Log.d(TAG, "onFail");
        }
    };

    private ViewStateListener mViewStateListener = new ViewStateListener() {
        @Override
        public void onPositionUpdate(int x, int y) {
            Log.d(TAG, "onPositionUpdate: x=" + x + " y=" + y);
        }

        @Override
        public void onShow() {
            Log.d(TAG, "onShow");
        }

        @Override
        public void onHide() {
            Log.d(TAG, "onHide");
        }

        @Override
        public void onDismiss() {
            Log.d(TAG, "onDismiss");
        }

        @Override
        public void onMoveAnimStart() {
            Log.d(TAG, "onMoveAnimStart");
        }

        @Override
        public void onMoveAnimEnd() {
            Log.d(TAG, "onMoveAnimEnd");
        }

        @Override
        public void onBackToDesktop() {
            Log.d(TAG, "onBackToDesktop");
        }
    };

因为这个项目还是功能简单的,就不把代码完整展示各位,有需要的可以看会开头的GitHub的连接去下载来学习,会更好,以及利用现有的代码,快速去实现自己的想要的需求。当然还有很多更好的方法,如果有更好的,可以留言,我们一起交流学习一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值