我需要在WebView
中运行Service
。包含我从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);
}
一切运行良好,但应用程序通常会因错误而崩溃:
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)
出现此错误的原因是Context,但在我的情况下,我没有将Context设置为WebView。
如何解决这个问题?
感谢。
答案 0 :(得分:2)
我可以提出另一个建议。而不是直接打开WebView
,如何创建在其XML布局中具有Activity
的{{1}},并使用<{1}}从WebView
开始/ p>
Activity
这将永久消除Service
的可能性。此外,Intent intent = new Intent(getBaseContext(), WebViewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(intent);
的网址可以作为BadTokenException
中WebView
的{{1}}的额外内容传递给Intent
。