Java WebView-无法添加窗口--标记null不适用于应用程序

Java WebView-无法添加窗口--标记null不适用于应用程序,java,android,android-intent,android-webview,android-service,Java,Android,Android Intent,Android Webview,Android Service,我需要在服务中运行WebView。包含我从browser.xml获取的WebView的标记。以下是我的代码片段: public class OverlayWindow extends Service { private WindowManager windowManager; private View browserView; private WebView webView; private WindowManager.LayoutParams browserVi

我需要在服务中运行WebView。包含我从browser.xml获取的WebView的标记。以下是我的代码片段:

public class OverlayWindow extends Service {
    private WindowManager windowManager;
    private View browserView;
    private WebView webView;
    private WindowManager.LayoutParams browserViewParams;

    @Override
    public void onCreate() {
        super.onCreate();

        browserView = layoutInflater.inflate(R.layout.browser, null);
        windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
        webView = (WebView) browserView.findViewById(R.id.webView);

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    webView.loadUrl(url);
                return true;
            }
        }

        browserViewParams = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_PHONE,
                WindowManager.LayoutParams.FLAG_FULLSCREEN,
                PixelFormat.TRANSLUCENT);

        windowManager.addView(browserView, browserViewParams);
}
一切正常,但应用程序经常会因错误而崩溃:

这个错误的原因是上下文,但在我的例子中,我没有将上下文设置为WebView

如何解决这个问题


谢谢。

我可以提供另一个建议。与其直接打开WebView,不如创建一个XML布局中包含WebView的活动,并使用


这将永久消除异常的可能性。此外,WebView的URL可以作为额外的目的从服务传递到活动。

我可以提供另一个建议。与其直接打开WebView,不如创建一个XML布局中包含WebView的活动,并使用


这将永久消除异常的可能性。此外,WebView的URL可以作为额外的目的从服务传递到活动。

您使用的android版本可能存在重复?通常,您应该避免在服务中使用webview,因为它工作得不太好。请尝试在webViewClient中放置一个空的OnReceiveDerror方法来覆盖它,因为如果在服务中运行,默认实现可能会导致崩溃。另外,不要无条件重写shouldOverrideUrlLoading,因为它是。@LittleChild,不,它不是重复的,因为OP询问的是特定的错误消息。谢谢您的回答@JonasCz我有两台安卓4.4.4平板电脑。在一个平板电脑上工作正常,但在另一个平板电脑上发生错误。但是OnReceiveDerror在页面加载时没有捕获错误。您所使用的android版本可能重复?通常,您应该避免在服务中使用webview,因为它工作得不太好。请尝试在webViewClient中放置一个空的OnReceiveDerror方法来覆盖它,因为如果在服务中运行,默认实现可能会导致崩溃。另外,不要无条件重写shouldOverrideUrlLoading,因为它是。@LittleChild,不,它不是重复的,因为OP询问的是特定的错误消息。谢谢您的回答@JonasCz我有两台安卓4.4.4平板电脑。在一个平板电脑上工作正常,但在另一个平板电脑上发生错误。但是OnReceiveDerror在页面加载时不会捕获错误。
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
        at android.view.ViewRootImpl.setView(ViewRootImpl.java:571)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:246)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
        at android.app.Dialog.show(Dialog.java:281)
        at android.app.AlertDialog$Builder.show(AlertDialog.java:951)
Intent intent = new Intent(getBaseContext(), WebViewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(intent);