在做地圖選擇地址時故源,可以使用WebView
+ JS回調
的方式做為其中的一個方案
騰訊地圖方案
注冊賬號 騰訊位置服務
添加應用并申請開發(fā)key橄维,需要勾選
Webservice
-
編寫
html
文件index.html
并放到assets
目錄下允跑, 參照: 地圖組件 | 騰訊位置服務 (qq.com)<iframe id="mapPage" width="100%" height="100%" frameborder=0 src="https://apis.map.qq.com/tools/locpicker?search=1&type=1&key=替換成你的Key&referer=你的應用名稱"> </iframe> <script> // 安卓端注入的對象凡恍,我這里起名為 evil,可以是其他 let evil = window.evil window.addEventListener('message', function (event) { // 接收位置信息嗽元,用戶選擇確認位置點后選點組件會觸發(fā)該事件抄邀,回傳用戶的位置信息 let loc = event.data; if (loc && loc.module == 'locationPicker') {//防止其他應用也會向該頁面post信息,需判斷module是否為'locationPicker' if (evil) { // JS 回調方式晌纫,自定義即可 evil.invoke('location', JSON.stringify(loc)) } else { console.log('loc', loc); } } }, false); </script>
-
編寫Android端代碼
WebView web = new WebView(context); WebSettings settings = web.getSettings(); settings.setJavaScriptEnabled(true); web.addJavascriptInterface(new Object() { @JavascriptInterface public void invoke(String key, String value) { if ("location".equals(key)) { // 獲取到位置的JSON字符串 value } } }, "evil"); web.loadUrl("file:///android_asset/index.html");
JSON
格式為{ module:'locationPicker', latlng: { lat: 39.998766, lng: 116.273938 }, poiaddress: "北京市海淀區(qū)新建宮門路19號", poiname: "頤和園", cityname: "北京市" }
不編寫
html
文件的情況下可使用WebView
加載字符串的方式加載String html = "<iframe id=\"mapPage\"width=\"100%\"height=\"100%\"frameborder=0 src=\"https://apis.map.qq.com/tools/locpicker?search=1&type=1&key=替換成你的Key&referer=你的應用名稱\"></iframe><script>let evil=window.evil;window.addEventListener('message',function(event){let loc=event.data;if(loc&&loc.module=='locationPicker'){if(evil){evil.invoke('location',JSON.stringify(loc))}else{console.log('loc',loc)}}},false);</script>"; web.loadData(html, "text/html", "utf-8");
- 測試
高德地圖方案
選址組件-開發(fā)指南-地圖組件|高德地圖API (amap.com)
參照上面文檔税迷,暫沒使用,方法應該和使用騰訊的差不多
百度地圖
暫時沒找到選址組件锹漱,后續(xù)找到了補充