ITPub博客

首页 > 移动开发 > ANDROID > Android中的悬浮框

Android中的悬浮框

原创 ANDROID 作者:山有木xi 时间:2020-11-06 14:01:27 0 删除 编辑

悬浮窗其实在移动平台的使用中会经常的遇到,无论是系统自带的悬浮窗,还是视频软件的退出时出现的悬浮窗,无论是聊天软件的通话悬浮窗,还是各大管家软件为了清理后台的悬浮窗,都会经常性的出现在我们的生活使用当中

而其实,写一个悬浮窗也是一件不难的事情

首先,我们需要判断申请了相关的权限

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

然后在代码中需要判断,用户是否给予了我们的软件相关的权限

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (!Settings.canDrawOverlays(this)) {
        Toast.makeText(this, "暂无悬浮窗权限,请授权", Toast.LENGTH_SHORT)
        GlobalDialogSingle(
            this, "", "请开启悬浮窗权限", "去开启"
        ) { dialog, which ->
            dialog.dismiss()
            startActivityForResult(
                Intent(
                    Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                    Uri.parse("package:$packageName")
                ), 0
            )
        }.show()
    } else {
        moveTaskToBack(true)//让程序退往后台,让悬浮窗进入前台
        val intent = Intent(this@MainActivity, FloatServices::class.java)
        hasBind = bindService(intent, ServiceCon, BIND_AUTO_CREATE)
    }
}

而FloatServices需要继承service,并在其中处理悬浮窗的各种事件和显示处理

@Nullable
@Override
public IBinder onBind(Intent intent) {
    showWindow();//悬浮窗显示事件
    ClickFloat();//处理点击事件
    return new MyBinder();
}

悬浮窗相关参数

private void showWindow() {
    winManager = (WindowManager) getApplication().getSystemService(Context);
    wmParams = getParams();
    wmParams.gravity = Gravity.RIGHT| Gravity.TOP;
    wmParams.x = winManager.getDefaultDisplay().getWidth();
    wmParams.y = 500;
    inflater = LayoutInflater.from(getApplicationContext());
    mFloatingLayout = inflater.inflate(R.layout.remoteview, null);
    winManager.addView(mFloatingLayout, wmParams);
}

点击事件

private void ClickFloat() {
//在这其中处理悬浮窗的点击或者移动事件
}


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69917874/viewspace-2732595/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: BottomNavigationView
请登录后发表评论 登录
全部评论
Oracle OCA(Java),IBM高级工程师认证,中国软件行业人才(高级c语言),高级Android工程师,对数据库并发与性能调优也有一定了解

注册时间:2019-04-25

  • 博文量
    147
  • 访问量
    390763