|
@@ -20,7 +20,9 @@ public class FloatPhone extends FloatView {
|
|
|
|
|
|
FloatPhone(Context applicationContext) {
|
|
|
mContext = applicationContext;
|
|
|
- mWindowManager = (WindowManager) applicationContext.getSystemService(Context.WINDOW_SERVICE);
|
|
|
+ //创建WindowManager
|
|
|
+ mWindowManager = (WindowManager)
|
|
|
+ applicationContext.getSystemService(Context.WINDOW_SERVICE);
|
|
|
mLayoutParams = new WindowManager.LayoutParams();
|
|
|
}
|
|
|
|
|
@@ -34,12 +36,29 @@ public class FloatPhone extends FloatView {
|
|
|
public void setView(View view) {
|
|
|
int layoutType;
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
|
+ //Android 8.0以后不允许使用一下窗口类型来在其他应用和窗口上方显示提醒窗口
|
|
|
+ //TYPE_PHONE
|
|
|
+ //TYPE_PRIORITY_PHONE
|
|
|
+ //TYPE_SYSTEM_ALERT
|
|
|
+ //TYPE_SYSTEM_OVERLAY
|
|
|
+ //TYPE_SYSTEM_ERROR
|
|
|
+ //如果需要实现在其他应用和窗口上方显示提醒窗口,那么必须该为TYPE_APPLICATION_OVERLAY的类型。
|
|
|
layoutType = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
|
|
|
} else {
|
|
|
+ //在Android 8.0之前,悬浮窗口设置可以为TYPE_PHONE,这种类型是用于提供用户交互操作的非应用窗口。
|
|
|
+ //Android 8.0以上版本你继续使用TYPE_PHONE类型的悬浮窗口,则会出现如下异常信息:
|
|
|
+ //android.view.WindowManager$BadTokenException:
|
|
|
+ //Unable to add window android.view.ViewRootImpl$W@f8ec928 -- permission denied for window type 2002
|
|
|
layoutType = WindowManager.LayoutParams.TYPE_PHONE;
|
|
|
}
|
|
|
mLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
|
|
|
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
|
|
|
+ //宽高自适应
|
|
|
+ mLayoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
|
|
|
+ mLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
|
|
|
+ //设置
|
|
|
+ mLayoutParams.format = PixelFormat.TRANSPARENT;
|
|
|
+ //设置类型
|
|
|
mLayoutParams.type = layoutType;
|
|
|
mLayoutParams.windowAnimations = 0;
|
|
|
mView = view;
|
|
@@ -57,7 +76,9 @@ public class FloatPhone extends FloatView {
|
|
|
public void init() {
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
|
if (WindowUtil.hasPermission(mContext)) {
|
|
|
+ //设置bitmap的格式
|
|
|
mLayoutParams.format = PixelFormat.RGBA_8888;
|
|
|
+ //将悬浮窗控件添加到WindowManager
|
|
|
mWindowManager.addView(mView, mLayoutParams);
|
|
|
} else {
|
|
|
PermissionActivity.request(mContext, new PermissionActivity.PermissionListener() {
|