悬浮窗功能基本代码:
//创建悬浮窗的图片,这里当然也可以用自定义的View,这里之用了简单的图片var imageView = ImageView(this)imageView.setImageResource(R.mipmap.ic_launcher)var layoutParams = WindowManager.LayoutParams()var windowManager: WindowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManagerlayoutParams.format = PixelFormat.RGBA_8888layoutParams.flags =WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_NOT_FOCUSABLElayoutParams.gravity = Gravity.TOP or Gravity.LEFTlayoutParams.width = WindowManager.LayoutParams.WRAP_CONTENTlayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENTlayoutParams.x = 200layoutParams.y = 200windowManager.addView(imageView, layoutParams)
如果有报错,那可能是没有设置悬浮窗的类型的原因。
只要在windowManager.addView 之前添加悬浮窗类型的代码即可
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION} elselayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
当然,有的需求可能不太满足,比如说我想要在桌面也显示的话怎么办?
那就得需要用户自己到应用设置里面去打开后台弹出界面了。
/*之前的 layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION或者是 WindowManager.LayoutParams.TYPE_SYSTEM_ALERT修改成 WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY同时,需要在AndroidManifest.xml文件中申请悬浮窗权限<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />*/layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAYvar intent = Intent()intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)//跳转到应用信息界面intent.action = Intent.ACTION_AUTO_REVOKE_PERMISSIONS//跳转到哪个应用的信息界面intent.data = Uri.fromParts("package", packageName, null)startActivity(intent)
悬浮窗暂时只写这么多,如果后面还有的话我还是会补充的。
有问题的话可直接评论。