我正在尝试在网络视图中显示Google地图,但这是在说
Google Maps Platform拒绝了您的请求。非法请求。无效的“ pb”参数。
但是当我在网络浏览器上渲染相同的iframe时,它运行良好
这是我要在网络视图中呈现的内容,这是存储在变量 iframeData
中的字符串<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<body>
<iframe src="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d14988.154038971099!2d57.510438!3d-20.090677!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xc479c0ed4774c8e7!2sThe+Westin+Turtle+Bay+Resort+%26+Spa%2C+Mauritius!5e0!3m2!1sen!2smu!4v1513055435928" width="340.0" height="250" frameborder="0" style="border:0" allowfullscreen></iframe>
</body>
</html>
这是我的Android代码,用于将此iframe呈现到webview
String iframeData = //look above
WebView webViewMap = (WebView) rootView.findViewById(R.id.webViewMap);
WebSettings settings = webViewMap.getSettings();
settings.setJavaScriptEnabled(true);
settings.setBuiltInZoomControls(true);
settings.setSupportZoom(false);
settings.setUseWideViewPort(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
settings.setAllowUniversalAccessFromFileURLs(true);
}
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webViewMap.loadData(iframeData, "text/html", null);
答案 0 :(得分:1)
示例中iframe
内的URL看起来像是从Google Maps网站上的共享位置获得的链接。通常,不应将该网址视为Google Maps Platform产品。但是,由于某种原因,Google在WebView
组件中将其视为Google Maps Platform。
我认为这是Google的错误。
解决方法是使用Google Maps Embed API中的URL替换共享URL。在这种情况下,您将拥有正确的Google Maps Platform链接,它应该可以正常工作。请注意,您需要有效的API密钥才能使用Google Maps Embed API。
代码段为:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<body>
<iframe width="600" height="450" frameborder="0" style="border:0"
src="https://www.google.com/maps/embed/v1/place?q=The+Westin+Turtle+Bay+Resort+%26+Spa%2C+Mauritius&key=AIzaSyDztlrk_3CnzGHo7CFvLFqE_2bUKEq1JEU" allowfullscreen></iframe>
</body>
</html>
您应该用我的API密钥替换。
我希望这会有所帮助!
答案 1 :(得分:0)
对此的无缝方法是:
复制您想要的地图尺寸的 HTML 代码,并将其粘贴到您的 iframe 中。
答案 2 :(得分:-2)
正确答案:
使用URLEncoder.encode(...)对URL进行编码以转义字符并解决问题。
String googleMapLink = "https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d14988.154038971099!2d57.510438!3d-20.090677!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xc479c0ed4774c8e7!2sThe+Westin+Turtle+Bay+Resort+%26+Spa%2C+Mauritius!5e0!3m2!1sen!2smu!4v1513055435928";
String encodedUrl = null;
try {
encodedUrl = URLEncoder.encode(googleMapLink,"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String iframe = "<iframe src=\""+ encodedUrl +"\" width=\"100%\" height=\"100%\" frameborder=\"0\" style=\"border:0\" allowfullscreen></iframe>";
googlemap_webView.getSettings().setJavaScriptEnabled(true);
googlemap_webView.loadData(iframe, "text/html", "utf-8");