相关疑难解决方法(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万
查看次数

Android:无法添加窗口.此窗口类型的权限被拒绝

我工作的一个应用程序,我需要显示一些信息的窗口ON未解锁手机的锁屏(键盘保护).我想我可以用WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG做到这一点

但每次我的应用程序崩溃时出现以下错误:

android.view.WindowManager $ BadTokenException:无法添加窗口android.view.ViewRootImpl$W@40ec8528 - 此窗口类型的权限被拒绝

这些帖子(这里,这里这里)都给出了相同的答案.在清单文件中添加以下权限.

android.permission.SYSTEM_ALERT_WINDOW

我已经实现的解决方案,但我仍然得到相同的错误.我知道我做错了什么?

以下是我的清单文件中的权限:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.droidpilot.keyguardwindow" >

<uses-sdk
    android:minSdkVersion="16"
    android:targetSdkVersion="21" />

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
Run Code Online (Sandbox Code Playgroud)

这是我用来将Window添加到锁定屏幕的代码

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    LayoutInflater mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    mView = mInflater.inflate(R.layout.lock_screen_notif, null);

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG,
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED …
Run Code Online (Sandbox Code Playgroud)

android android-windowmanager

73
推荐指数
9
解决办法
10万
查看次数

Android:使用TYPE_APPLICATION_OVERLAY拒绝窗口类型2038的权限

我试图创建一个高于其他应用程序的视图:

WindowManager.LayoutParams paramsDirectorView = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        PixelFormat.TRANSLUCENT);
Run Code Online (Sandbox Code Playgroud)

我查看了其他回复,发现了以下"绘制应用程序"的内容:

  • 我在清单中有android.permission.SYSTEM_ALERT_WINDOW
  • 我正在进行Settings.canDrawOverlays(this)检查,返回true.
  • 我已经完成了所有位于这里的窗口类型的权限被拒绝

我仍然得到" - 窗口类型2038的权限被拒绝"错误.截至目前我正在使用TYPE_PHONE并且它可以工作,但它已被弃用并且说要使用TYPE_APPLICATION_OVERLAY.有人可以对此进行跟进,因为TYPE_PHONE答案不是真正的解决方案,而是Android O中不推荐使用的"补丁工作"解决方案.

我在Android 7.1.2上运行

android.view.WindowManager $ BadTokenException:无法添加窗口android.view.ViewRootImpl$W@1f47e89 - android.app.ActivityThread上android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3344)的窗口类型2038的权限被拒绝.- wrap21(ActivityThread.java)位于android.app.AooT.Thread上的android.O. HandleMessage(Handler.java:102)上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1583).(Looper) .java:154)在android.app.ActivityThread.main(ActivityThread.java:6121)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit) .java:889)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)引起:android.view.WindowManager $ BadTokenException:无法添加窗口android.view.ViewRootImpl$W@1f47e89 - 在Android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:342)的android.view.ViewRootImpl.setView(ViewRootImpl.java:703)上的窗口类型2038的权限被拒绝 HeadService.TwoViewManager的android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93).(两个ViewManager.java:99)位于android.app.ActivityThread.handleServiceArgs(ActivityThread)的HeadService.UIHeadService.onStartCommand(UIHeadService.java:65). java:3327)在Android.app.Handler.dispatchMessage(Handler.java:102)的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1583)的android.app.ActivityThread.-wrap21(ActivityThread.java)在android.os.Looper.loop(Looper.java:154)的android.app.ActivityThread.main(ActivityThread.java:6121),位于com.android.internal的java.lang.reflect.Method.invoke(Native Method) .os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:889)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

android android-windowmanager android-layoutparams

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

如何在不使用相机应用程序的情况下在后台捕获图像

我有一个Android应用程序,它包含一个Button.
当您单击按钮时,应从相机捕获图像而不打开相机应用程序(图像应在后台捕获).
如何实现此功能?
任何建议都会有很大帮助.
非常感谢提前.

camera android background capture

10
推荐指数
1
解决办法
3万
查看次数

我是否需要android.permission.SYSTEM_ALERT_WINDOW作为WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY?

我已经看到:WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY始终与<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />in 结合使用AndroidManifest.xml。例如这里

考虑以下代码:

    windowManager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
    surfaceView = new SurfaceView(this);
    WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
            100, 100,
            WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
            WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
            PixelFormat.TRANSLUCENT
    );
    layoutParams.gravity = Gravity.START | Gravity.TOP;
    windowManager.addView(surfaceView, layoutParams);
Run Code Online (Sandbox Code Playgroud)

我需要此代码SYSTEM_ALERT_WINDOW权限吗?

来自doc的有关SYSTEM_ALERT_WINDOW

允许应用使用TYPE_SYSTEM_ALERT类型创建窗口,该窗口显示在所有其他应用的顶部。很少有应用程序应使用此权限;这些窗口用于与用户进行系统级交互。

大约TYPE_SYSTEM_ALERT不是TYPE_SYSTEM_OVERLAY。嗯?

更新:
行:windowManager.addView(surfaceView, layoutParams);

java.lang.RuntimeException: Unable to create service: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@10dca8ac -- permission denied for this window type
Run Code Online (Sandbox Code Playgroud)

因此可能<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />是必要的。

permissions android android-permissions

4
推荐指数
1
解决办法
4320
查看次数