基于html5+webview五分钟快速完成一个地图选址组件
2016-10-29 23:51
666 查看
记录一下,是个好思路,但不是个高深的技术
首先按照传统的方式如果要做这样一个位置选择器控件,就要去下载地图sdk,无论是百度还是高德,虽然地图已经做了很多封装,但是用起来还是很麻烦,比如要自己去写listview,各种事件监听,而需求只是需要选择一个位置,然后进行位置分享或者其他。有没有其他的方式呢?答案是肯定的,办法也是我偶然间看到的。
腾讯有个基于html5的地图选点组件,在腾讯地图开放平台可以看见,也有调用方式。
然后剩下html5和webview的数据交互就很简单了,我贴一下代码
然后map.html的代码,key需要你自己去申请一个,因为这个代码也是我从项目中剥离出来的,key就不分享了
首先按照传统的方式如果要做这样一个位置选择器控件,就要去下载地图sdk,无论是百度还是高德,虽然地图已经做了很多封装,但是用起来还是很麻烦,比如要自己去写listview,各种事件监听,而需求只是需要选择一个位置,然后进行位置分享或者其他。有没有其他的方式呢?答案是肯定的,办法也是我偶然间看到的。
腾讯有个基于html5的地图选点组件,在腾讯地图开放平台可以看见,也有调用方式。
然后剩下html5和webview的数据交互就很简单了,我贴一下代码
import android.content.Context; import android.content.SharedPreferences; import android.graphics.Color; import android.os.Handler; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.webkit.JavascriptInterface; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.widget.Toast; public class TMap extends AppCompatActivity { String wz_json; WebView mWebView; private Handler mHandler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tmap); mWebView= (WebView) findViewById(R.id.web); //设置编码 mWebView.getSettings().setDefaultTextEncodingName("utf-8"); //支持js mWebView.getSettings().setJavaScriptEnabled(true); //设置本地调用对象及其接口 mWebView.addJavascriptInterface(new JavaScriptObject(this), "myObj"); mWebView.loadUrl("file:///android_asset/map.html"); findViewById(R.id.bt_cancel).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); findViewById(R.id.bt_ok).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (wz_json!=null&&!wz_json.equals("")){ getSharedPreferences("set",MODE_PRIVATE).edit().putString("location",wz_json).commit(); showSnackbar("保存成功"); return; } showSnackbar("位置未选择,不能保存"); } }); } public class JavaScriptObject { Context mContxt; public JavaScriptObject(Context mContxt) { this.mContxt = mContxt; } @JavascriptInterface //sdk17版本以上加上注解 public void setLoc(String msg) { wz_json=msg; } } private void showSnackbar(String msg){ Snackbar sBar = Snackbar.make(findViewById(R.id.relativeLayout2), msg, Snackbar.LENGTH_SHORT); Snackbar.SnackbarLayout ve = (Snackbar.SnackbarLayout)sBar.getView(); ve.setBackgroundColor(Color.parseColor("#009966")); sBar.show(); }
然后map.html的代码,key需要你自己去申请一个,因为这个代码也是我从项目中剥离出来的,key就不分享了
<!DOCTYPE html> <html> <html><head lang="zh-CN"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="format-detection" content="address=no"> <title>地图</title> </head> <body> <iframe id="mapPage" width="100%" frameborder="0" scrolling="no" height="589" src="http://apis.map.qq.com/tools/locpicker?search=1&type=1&key=你的key&referer=myapp"> </iframe> <script> window.addEventListener('message', function(event) { // 接收位置信息,用户选择确认位置点后选点组件会触发该事件,回传用户的位置信息 var loc = event.data; if (loc && loc.module == 'locationPicker') {//防止其他应用也会向该页面post信息,需判断module是否为'locationPicker' myObj.setLoc(JSON.stringify(loc)); } }, false); </script> </body> </html>
相关文章推荐
- IB中,如何快速将一些组件整体放入或移出一个view(或Scrollview)中
- android、IOS 基于webview 与 HTML 的集成
- 快速创建一个基于Gradle构建的SpringBoot Web项目(SpringBoot-01)
- iPhone 和 iPad的ios 开发中 利用 WebViewJavascriptBridge组件,通过 UIWebView 对Html进行双向通讯
- WebView_返回键返回到上一个HTML界面不回到源生界面的方法
- Xlistview下拉刷新、上拉加载更多ViewPage+Handler完成无限轮播上下拉刷新;webView显示一个网页
- 《JavaFX应用程序添加HTML内容》-添加WebView组件到应用程序场景
- HTML---android webview组件如何使用 Webview与js交互
- 使用WKWebView的一个问题:iOS中使用本地html的一个大坑
- Webview组件和HTML的介绍
- iPhone 和 iPad的ios 开发中 利用 WebViewJavascriptBridge组件,通过 UIWebView 对Html进行双向通讯
- android webview点击返回键返回上一个html
- android webview点击返回键返回上一个html
- Android原生软件里嵌入一个基于cordova的网页页面(webview)
- 基于MUI框架的使用HTML5+实现的二维码扫描功能并且其结果在webview中的信息的传递
- 《JavaFX应用程序添加HTML内容》-JavaFX WebView组件概述
- iOS模态跳转的页面WebView中加载html调用本机相册会dismiss返回上一个页面解决办法
- android webview点击返回键回到上一个html
- Webview组件和HTML的介绍
- android webview点击返回键回到上一个html