Java WebView-无法添加窗口--标记null不适用于应用程序
我需要在服务中运行WebView。包含我从browser.xml获取的WebView的标记。以下是我的代码片段: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
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);