1.准备工作
//检测并请求窗口弹窗权限,切记在清单注册
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
//检测窗口权限是否开启
private boolean isPermissionOpen() {
boolean isPermission = false;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
isPermission = Settings.canDrawOverlays(this);
}
if (!isPermission)
requestOverlayPermission();
return isPermission;
}
//如未开启,申请打开窗口权限
private void requestOverlayPermission() {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.M) {
return;
}
Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
myIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
myIntent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(myIntent, REQUEST_SETTING_WINDOW);
}
2.实现悬浮(必须有view)
private void showFloatingWindow(View view) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Settings.canDrawOverlays(this)) {
// 获取WindowManager服务
ViewGroup.LayoutParams params = view.getLayoutParams();
params.height = ViewGroup.LayoutParams.MATCH_PARENT;
params.width = ViewGroup.LayoutParams.MATCH_PARENT;
view.setLayoutParams(params);
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
// roteImageView((ImageView) displayView.findViewById(R.id.image_change));
// 设置LayoutParam
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
}
layoutParams.format = PixelFormat.RGBA_8888;
layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCHABLE;
// 将悬浮窗控件添加到WindowManager
windowManager.addView(displayView, layoutParams);
DisplayMetrics dm = new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;
Intent main = new Intent(Intent.ACTION_MAIN);
main.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
main.addCategory(Intent.CATEGORY_HOME);
startActivity(main);
}
}
}
完结~
网友评论