android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@f1915f0 -- permission denied for window type 2038
时间: 2023-11-27 12:50:45 浏览: 38
这个异常表示应用程序没有权限添加指定类型的窗口,窗口类型为2038。这通常是因为应用程序在尝试添加一个悬浮窗口,但是没有申请悬浮窗口权限。在Android 6.0以上的版本中,需要动态请求悬浮窗口权限。
您可以尝试以下解决方法:
1. 在AndroidManifest.xml文件中添加以下权限:
```
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
```
2. 在运行时请求悬浮窗口权限:
```
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, REQUEST_CODE);
}
```
3. 在应用程序中添加悬浮窗口时,请确保使用正确的窗口类型。可以使用以下代码:
```
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ?
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY :
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
```
请注意,如果应用程序使用了错误的窗口类型,可能会导致其他问题。因此,请确保仅在必要时使用悬浮窗口,并且仅在正确的类型下使用。