权限-悬浮窗
Posted hellodingc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了权限-悬浮窗相关的知识,希望对你有一定的参考价值。
申明:低级码农问题解决中的参考和解决后的小结,仅用于个人记录,能力有限,可能有些错误,缺陷不自知,欢迎在评论中指正,谢谢!
- 需要申请悬浮窗权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
- 判断悬浮窗权限的方法(8.0以上,有的机型不需要判断,比如我的Meizu X8):
android.provider.Settings.canDrawOverlays(Context)
- 使用WindowManager显示悬浮窗
注意,8.0以上,必须使用 TYPE_APPLICATION_OVERLAY
// 找到布局文件 View popup = LayoutInflater.from(getApplicationContext()).inflate(R.layout.popup, null); WindowManager mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); // WindowManager.LayoutParams的参数 WindowManager.LayoutParams mViewParams = new WindowManager.LayoutParams(); mViewParams.width = WindowManager.LayoutParams.WRAP_CONTENT; mViewParams.height = WindowManager.LayoutParams.WRAP_CONTENT; mViewParams.gravity = Gravity.CENTER; DisplayMetrics dm = new DisplayMetrics(); mWindowManager.getDefaultDisplay().getMetrics(dm); mViewParams.x = -(int) dm.widthPixels / 2; mViewParams.y = -(int) dm.heightPixels / 2; // 8.0系统加强后台管理,禁止在其他应用和窗口弹提醒弹窗,如果要弹,必须使用TYPE_APPLICATION_OVERLAY if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { mViewParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; } else { mViewParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; } mViewParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON; mViewParams.format = PixelFormat.RGBA_8888; mViewParams.alpha = 0.5f; mWindowManager.addView(popup, mViewParams);
以上是关于权限-悬浮窗的主要内容,如果未能解决你的问题,请参考以下文章