android加载高德地图请求服务器添加经纬度marker标记(调用h5加载)
目录
前言:(原创文章,转载请注明出处)
老板突发奇想要让用android加载h5做地图,还有根据请求的不同经纬度在地图上显示出不同的marker标记(。。。。这个破需求感觉没啥大用处,可能也就不懂软件的人看着高大上吧)本人小白,不会h5,也不会js。根据自己写过的webview的demo加上后台(比我js懂得多)的帮助,终于攻克了这个小难题,下面给大家一个小教程,以免走弯路。
一:webview设置
webView.getSettings().setAppCacheEnabled(true);//是否使用缓存api集
webView.getSettings().setJavaScriptEnabled(true);//js交互
webView.getSettings().setDomStorageEnabled(true);//与地图交互
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//设置js可弹窗
webView.setWebChromeClient(new WebChromeClient(){}//处理解析,渲染网页
webView.setWebViewClient(new WebViewClient(){}//打开网页时不调用系统浏览器,而是在本地的webview显示
二:js地图加载显示
<script src="http://code.jquery.com/jquery-1.4.1.min.js"></script>
<script type="text/javascript"
src="https://webapi.amap.com/maps?v=1.4.10&key=“你自己申请的key"></script>
<script type="text/javascript">
设置地图的中心点及缩放级别
var map = new AMap.Map('container', {
resizeEnable: true,
center: [116.39, 39.9],
zoom: 5
});
添加marker标记(marker是后台传过来的坐标数据)
function didi(l,s){
var marker = new AMap.Marker({
position: new AMap.LngLat(114.38, 38.9), // 经纬度对象,也可以是经纬度构成的一维数组[114.38, 38.9]
title: ''
});
map.add(marker);
}
三:webview与js交互传值
加载本地html(“路径固定这样写,html文件名带后缀引用时就加上后缀,不带后缀引用时就不要加后缀名”)
webView.loadUrl("file:///android_asset/xinwenben.html");
根据进度条显示地图加载情况
@Override
public void onProgressChanged(WebView view, int newProgress) {
if(newProgress==100){
Toast.makeText(MapActivity.this, "地图加载完毕", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MapActivity.this, "地图正在加载中", Toast.LENGTH_SHORT).show();
}
}
单个传值:
webView.loadUrl("javascript:didi(" + strLong + "," + strLat +")");//传参(经纬度)
集合传值:
/**
* 打开网页时不调用系统浏览器,而是在本地webview显示
*/
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
Log.d("fan","这次地图加载完成了");
String[] strings=new String[10];
for (int i=0;i<list.size();i++){
//集合传参
webView.loadUrl("javascript:didi(要传的集合);
}
// Log.d("fan","..."+strLong+"..."+strLat);
}
});
返回键点击事件
/**
* 重写返回键点击事件
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(webView.canGoBack() && keyCode==KeyEvent.KEYCODE_BACK){
webView.goBack();//返回上一层页面
}
return true;
}
转载自:https://blog.csdn.net/u011208447/article/details/84190963