我试图通过WebView渲染嵌入在网页中的谷歌地图。虽然它可以在模拟器上运行,但它不能在设备上运行(android 2.3.6和4.4.2)。以下是我的代码:
WebView webview = (WebView) findViewById(R.id.webView1);
webview.setWebViewClient(new WebViewClient());
webview.getSettings().setJavaScriptEnabled(true);
String url = "http://mywebsite.com/mobile_map.php";
webView.loadUrl(url);
我尝试了一个直接的网址,而不是我的网页,因为" https://www.google.co.in/maps/@20.3008841,85.7699553,12z?hl=en" 这也适用于AVD,但不适用于设备。
尝试实现AsysnkTask并处理ssl错误,如下所示:
public class LoadSocialNetworkUrlTask extends AsyncTask<String, String, Void> {
protected void onPreExecute() {
dialog = new ProgressDialog(MapActivity.this);
dialog.setMessage("Loading,Please wait...");
dialog.setIndeterminate(true);
dialog.setCancelable(true);
dialog.show();
}
protected void onProgressUpdate(final String... url) {
try {
((WebView) webView).getSettings().setJavaScriptEnabled(true);
((WebView) webView).setBackgroundColor(Color.TRANSPARENT);
((WebView) webView).setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // Ignore SSL certificate errors
}
@Override
public void onPageFinished(WebView view, String url) {
// TODO hide your progress image
super.onPageFinished(view, url);
dialog.dismiss();
}
});
((WebView) webView).loadUrl(url[0]);
} catch (Exception e) {
e.printStackTrace();
dialog.dismiss();
}
}
@Override
protected Void doInBackground(String... url) {
try {
publishProgress(url);
} catch (Exception e) {
e.printStackTrace();
dialog.dismiss();
}
return null;
}
}
但结果相同。 我错过了什么?我们不应该在webview中显示包含地图的页面并直接使用api处理地图吗?我必须在设备中进行一些设置吗? (该设备已连接到互联网。)