应该确保AndroidManifest.xml中的android:targetSdkVersion设置为31,并且使用TYPE_APPLICATION_OVERLAY代替TYPE_SYSTEM_OVERLAY作为窗口类型。
代码示例:
//声明变量 private static final int MY_PERMISSIONS_REQUEST_SYSTEM_ALERT_WINDOW = 101;
//检查应用程序覆盖权限是否被授予 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())); startActivityForResult(intent, MY_PERMISSIONS_REQUEST_SYSTEM_ALERT_WINDOW); } else { //创建应用程序覆盖窗口 WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, WindowManager.LayoutParams.FLAG_FULLSCREEN, PixelFormat.TRANSLUCENT); ViewGroup content = (ViewGroup) LayoutInflater.from(this).inflate(R.layout.layout_overlay, null); WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); wm.addView(content, params); }