Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何修复服务中不存在的WindowManagerBadtokenexException';你没有活动机器人吗?_Android_Service_Broadcastreceiver_Android Source_Android Windowmanager - Fatal编程技术网

Android 如何修复服务中不存在的WindowManagerBadtokenexException';你没有活动机器人吗?

Android 如何修复服务中不存在的WindowManagerBadtokenexException';你没有活动机器人吗?,android,service,broadcastreceiver,android-source,android-windowmanager,Android,Service,Broadcastreceiver,Android Source,Android Windowmanager,我已经创建了一个aosp,在服务中,它有窗口管理器。我已在清单中声明了窗口管理器权限,但仍然出现无法添加窗口的错误 public class BannerService extends Service { private WindowManager mWinManager; private WindowManager.LayoutParams mUpperBannerParams; private WindowManager.LayoutParams mExpandSysMsgLayoutPar

我已经创建了一个aosp,在服务中,它有窗口管理器。我已在清单中声明了窗口管理器权限,但仍然出现无法添加窗口的错误

public class BannerService extends Service {
private WindowManager mWinManager;
private WindowManager.LayoutParams mUpperBannerParams;
private WindowManager.LayoutParams mExpandSysMsgLayoutParam;
private WindowManager.LayoutParams mExpandLayoutParam;
@Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate");
 mWinManager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
 mUpperBannerParams = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
        mUpperBannerParams.width = WindowManager.LayoutParams.MATCH_PARENT;
        mUpperBannerParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
mUpperBannerParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
                WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
        mUpperBannerParams.format = PixelFormat.TRANSLUCENT;
        mUpperBannerParams.gravity = Gravity.TOP | Gravity.FILL_HORIZONTAL;
View bannerBackView = layout_inflater.inflate(R.layout.dummy_banner_background, null);

        mExpandBannerWindowContainer = new FrameLayout(this) {
            @Override
            public boolean dispatchTouchEvent(MotionEvent ev) {
                cancelResetExpandBanner(); // fail-safe: 
                return super.dispatchTouchEvent(ev);
            }
        };
        mWinManager.addView(mExpandBannerWindowContainer, mUpperBannerParams); //getting error at 813th line is this because windowmanager in 9. 

}
}
我甚至还加了一句

但我得到的错误是

 12-13 05:28:55.218  1125  1125 E AndroidRuntime: java.lang.RuntimeException: Unable to create service jp.advop.banner.application.BannerService: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@36c0149 -- permission denied for window type 2010
12-13 05:28:55.218  1125  1125 E AndroidRuntime:    at android.app.ActivityThread.handleCreateService(ActivityThread.java:3582)
12-13 05:28:55.218  1125  1125 E AndroidRuntime:    at android.app.ActivityThread.access$1300(ActivityThread.java:200)
12-13 05:28:55.218  1125  1125 E AndroidRuntime:    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1672)
12-13 05:28:55.218  1125  1125 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:106)
12-13 05:28:55.218  1125  1125 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:193)
12-13 05:28:55.218  1125  1125 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:6718)
12-13 05:28:55.218  1125  1125 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
12-13 05:28:55.218  1125  1125 E AndroidRuntime:    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
12-13 05:28:55.218  1125  1125 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:917)                                                
12-13 05:28:55.218  1125  1125 E AndroidRuntime: Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@36c0149 -- permission denied for window type 2010
12-13 05:28:55.218  1125  1125 E AndroidRuntime:    at android.view.ViewRootImpl.setView(ViewRootImpl.java:822)
12-13 05:28:55.218  1125  1125 E AndroidRuntime:    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356)
12-13 05:28:55.218  1125  1125 E AndroidRuntime:    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
12-13 05:28:55.218  1125  1125 E AndroidRuntime:    at jp.advop.banner.application.BannerService.onCreate(BannerService.java:813)
12-13 05:28:55.218  1125  1125 E AndroidRuntime:    at android.app.ActivityThread.handleCreateService(ActivityThread.java:3570)
我甚至还使用了前台服务

  public class ServiceBootReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        intent.setClass(context, BannerService.class);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                context.startForegroundService(intent);
            } else {
                context.startService(intent);
            }
        }
}

从Android 8开始,使用
SYSTEM\u ALERT\u窗口
权限的应用程序将不再使用
TYPE\u SYSTEM\u ERROR
窗口类型在其他应用程序和系统窗口上方显示警报窗口

相反,请使用名为的新窗口类型


参考资料:

从Android 8开始,使用
系统警报窗口
权限的应用程序不能再使用
类型系统错误
窗口类型在其他应用程序和系统窗口上方显示警报窗口

相反,请使用名为的新窗口类型


参考资料:

您在哪个Android版本上测试此功能?Android 9。在6中,它起作用了。我正在将6横幅服务迁移到android 9。当我在9中运行时,它抛出错误。你在哪个Android版本上测试这个?Android 9。在6中,它起作用了。我正在将6横幅服务迁移到android 9。当我在9中运行时,它会抛出错误。因此,我需要使用类型应用程序覆盖,而不是WindowManager.LayoutParams.TYPE\u SYSTEM\u错误?我仍然会收到相同的错误。原因:android.view.WindowManager$BadTokenException:无法添加窗口android.view.ViewRootImpl$W@913479c--窗口类型2010的权限被拒绝您是否在清单中声明了
系统警报\u窗口
权限?是,我声明了权限。是否需要使用drawOverlay?但我没有要使用的活动。因此,我需要使用类型应用程序覆盖,而不是WindowManager.LayoutParams.TYPE\u SYSTEM\u ERROR?我仍然收到相同的错误。原因:android.view.WindowManager$BadTokenException:无法添加窗口android.view.ViewRootImpl$W@913479c--窗口类型2010的权限被拒绝您是否在清单中声明了
系统警报\u窗口
权限?是,我声明了权限。是否需要使用drawOverlay?但是我没有活动可以使用。