Android 腾讯地图 选点定位,仿微信发送位置
【摘要】
效果图:
不需要集成定位、地图,然后标记 回调等繁琐的操作,你只需要一个webview,使用腾讯地图的地图选点组件即可。
申请key
接入指引
使用地图选点组件
调用方式一:
...
效果图:
申请key
使用地图选点组件
调用方式一:
通过iframe内嵌调用,地图选点组件的页面会根据开发者设置的iframe宽高自适应。
调用方式二:
通过页面跳转的方式调用该组件的时候,开发者需要设置backurl参数,用户点击选中的位置点后,页面跳转至开发者指定的返回地址(backurl),并将位置信息添加到回跳地址(backurl)上。
方式一明显是html的使用方式,方式二是通过页面跳转的方式调用,我们就可以用webview来加载。
这里要注意backurl,是我们自定义的回调地址,位置信息会添加到回跳地址(backurl)上,所以,拦截了回调地址就能知道位置信息了。
参数说明:
1,WebView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
2,初始化WebView并拦截跳转请求
String mUrl = "https://apis.map.qq.com/tools/locpicker?search=1&type=0&backurl=http://callback&key=QULBZ-6M6KO-5YZWR-SEYTJ-GNNS5-O6B3L&referer=myapp";
WebSettings settings = mWebView.getSettings();
settings.setRenderPriority(WebSettings.RenderPriority.HIGH);
settings.setSupportMultipleWindows(true);
settings.setJavaScriptEnabled(true);
settings.setSavePassword(false);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setMinimumFontSize(settings.getMinimumFontSize() + 8);
settings.setAllowFileAccess(false);
settings.setTextSize(WebSettings.TextSize.NORMAL);
mWebView.setVerticalScrollbarOverlay(true);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (!url.startsWith("http://callback")) {
view.loadUrl(url);
} else {
try {
LogUtil.i(url);
//转utf-8编码
String decode = URLDecoder.decode(url, "UTF-8");
LogUtil.i(decode);
//转uri,然后根据key取值
Uri uri = Uri.parse(decode);
String latng = uri.getQueryParameter("latng");//纬度在前,经度在后,以逗号分隔
String[] split = latng.split(",");
String lat = split[0];//纬度
String lng = split[1];//经度
String address = uri.getQueryParameter("addr");//地址
LogUtil.i(uri.getQueryParameter("addr"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return true;
}
});
mWebView.loadUrl(mUrl);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 回调地址http://callback
- 然后在shouldOverrideUrlLoading中处理逻辑
初始url是这样的:
http://callback/?name=%E9%99%86%E5%AE%B6%E5%98%B4&latng=31.23776,121.50218&addr=%E4%B8%8A%E6%B5%B7%E5%B8%82%E6%B5%A6%E4%B8%9C%E6%96%B0%E5%8C%BA%E9%99%86%E5%AE%B6%E5%98%B4&city=%E4%B8%8A%E6%B5%B7%E5%B8%82&module=locationPicker
- 1
明显是编码不对啊,然后转成utf-8:
String decode = URLDecoder.decode(url, "UTF-8");
- 1
http://callback/?name=陆家嘴&latng=31.23776,121.50218&addr=上海市浦东新区陆家嘴&city=上海市&module=locationPicker
- 1
然后把url转成uri,直接根据key取值即可
Uri uri = Uri.parse(decode);
String latng = uri.getQueryParameter("latng");//经纬度
String name = uri.getQueryParameter("name");//标题
String address = uri.getQueryParameter("addr");//地址
- 1
- 2
- 3
- 4
最后:如果不能获取位置附近的地址列表,在key控制台中,把WebServiceApi选项 选中即可。
感谢:https://www.jianshu.com/p/e466d6fce3e3
文章来源: blog.csdn.net,作者:yechaoa,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/yechaoa/article/details/88893785
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)