【发布时间】:2023-02-09 18:05:17
【问题描述】:
我知道这个问题以前经常被问到,但我仍然收到许多用户的崩溃报告,而不管他们的 API 是针对他们的。所以我有一个前台服务,我每次在运行它之前都会检查绘制权限。我使用以下代码:
int flags;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
flags = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
flags = WindowManager.LayoutParams.TYPE_PHONE;
}
myWindowParams = new WindowManager.LayoutParams(
movable_width,
movable_height,
flags,
WindowManager.LayoutParams.FLAG_IGNORE_CHEEK_PRESSES | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
PixelFormat.TRANSLUCENT);
显现
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
Firebase 错误
Exception: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@1a0fb9e -- permission denied for window type 2038
at android.view.ViewRootImpl.setView(ViewRootImpl.java:830)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:94)
at com.b.app.mainService.setupWindows(mainService.java:26)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3544)
at android.app.ActivityThread.access$1300(ActivityThread.java:200)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1676)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6762)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
有任何想法吗?
【问题讨论】:
标签: android service android-service android-windowmanager