相关疑难解决方法(0)

无法添加窗口android.view.ViewRoot$W@44da9bc0 - 此窗口类型的权限被拒绝

我比较喜欢这篇文章但是我在将viewgroup添加到windowmanager对象时遇到了错误,我已经使用相同的服务类来发布到问题而没有任何变化,我可能会误认为我没有得到它

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(mView, params); // here
Run Code Online (Sandbox Code Playgroud)

当我向WindowManger添加视图时

这是我的清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.searce.testoverlay"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="7" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name="TestOverlayActivity"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        <service android:enabled="true" android:name=".HUD"></service>
    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

错误

09-27 18:49:23.561: ERROR/AndroidRuntime(653): Uncaught handler: thread main exiting due to uncaught exception
09-27 18:49:23.571: ERROR/AndroidRuntime(653): java.lang.RuntimeException: Unable to create service com.searce.testoverlay.HUD: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRoot$W@44da9bc0 -- permission denied for this window type …
Run Code Online (Sandbox Code Playgroud)

android overlay

82
推荐指数
2
解决办法
7万
查看次数

WindowManager $ BadTokenException无法添加窗口

我正在为背景录像开发应用程序,这就是为什么我使用WindowManager,但它对我没有用.以下错误:

08-23 15:38:21.021: E/AndroidRuntime(4200): java.lang.RuntimeException: Unable to create service com.example.prankapp.BackgroundVideoRecorder: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@418c0b68 -- permission denied for this window type
    08-23 15:38:21.021: E/AndroidRuntime(4200):     at android.app.ActivityThread.handleCreateService(ActivityThread.java:2277)
    08-23 15:38:21.021: E/AndroidRuntime(4200):     at android.app.ActivityThread.access$1600(ActivityThread.java:128)
    08-23 15:38:21.021: E/AndroidRuntime(4200):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1215)
    08-23 15:38:21.021: E/AndroidRuntime(4200):     at android.os.Handler.dispatchMessage(Handler.java:99)
    08-23 15:38:21.021: E/AndroidRuntime(4200):     at android.os.Looper.loop(Looper.java:137)
    08-23 15:38:21.021: E/AndroidRuntime(4200):     at android.app.ActivityThread.main(ActivityThread.java:4517)
    08-23 15:38:21.021: E/AndroidRuntime(4200):     at java.lang.reflect.Method.invokeNative(Native Method)
    08-23 15:38:21.021: E/AndroidRuntime(4200):     at java.lang.reflect.Method.invoke(Method.java:511)
    08-23 15:38:21.021: E/AndroidRuntime(4200):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
    08-23 15:38:21.021: E/AndroidRuntime(4200):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
    08-23 15:38:21.021: E/AndroidRuntime(4200):     at …
Run Code Online (Sandbox Code Playgroud)

android android-camera android-windowmanager

14
推荐指数
2
解决办法
2万
查看次数

没有WindowManager.LayoutParams.TYPE_PHONE的粘性叠加

粘性是指不会因调用启动器意图(intent.addCategory(Intent.CATEGORY_HOME)而关闭的窗口。

以前是通过完成此操作的WindowManager.LayoutParams.TYPE_PHONE,但是现在不建议使用此类型,并且会在api 28上引发异常:

WindowManager $ BadTokenException ...窗口类型2002的权限被拒绝

由于Facebook的Messenger在其聊天窗口“ Heads”中进行了这种行为,因此仍然可能会发生这种行为,这是基于这样的假设:由于Facebook已预先安装在许多rom上,因此没有获得系统应用程序许可。

使用WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY不起作用(即,按下主页按钮也会隐藏覆盖窗口)。

编辑:问题是当用户单击主屏幕按钮/调用启动器意图时,如何具有不被删除的覆盖窗口。并非如此TYPE_APPLICATION_OVERLAY,这是事实,TYPE_PHONE但已过时。

编辑2:显然,这确实对某些人有用,这是我正在运行的代码:

class MyClass {

    var params: WindowManager.LayoutParams = WindowManager.LayoutParams(
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
                WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
            else WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG,
            WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
            PixelFormat.TRANSLUCENT
    ).apply {
        windowAnimations = android.R.style.Animation_Dialog
        gravity = Gravity.CENTER or Gravity.CENTER
        x = 0
        y = 0
    }
    var windowManager: WindowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager

    init {
        val layoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
        rootView = layoutInflater.inflate(R.layout.view_overlay, null)
        windowManager.addView(rootView, params)
    } …
Run Code Online (Sandbox Code Playgroud)

java android kotlin

8
推荐指数
1
解决办法
523
查看次数