高德 开发 Android 定位SDK 开发指南 获取位置 新版辅助H5页面定位

更新时间:2018年02月02日

该部分为新版H5辅助定位说明,使用定位SDK v3.8.0以及后续版本的开发者请参考该部分说明,

辅助 H5 页面定位功能服务于集成高德定位 SDK 以及使用高德 Javascript-Api 实现 H5 页面的 App,当页面需要使用位置时可以选择使用定位 SDK 辅助提供位置信息。

从3.8.0版本开始,针对H5辅助定位新增加了一个接口startAssistantLocation(WebView webView)用于启动H5辅助定位,之前的H5辅助定位接口startAssistantLocation()已不建议使用,后续版本中有可能会废弃,请尽快切换到新版的的H5辅助定位接口。

新版H5辅助定位接口核心代码如下, 详细代码请参照官网最新的Demo。

第一步,准备工作

请您参考获取定位数据章节的前期准备工作,包括配置AndroidManifest.xml、初始化定位

第二步,初始化AMapLocaitonClient

使用下面的代码初始化AMapLocaitonClient:

locationClient = new AMapLocationClient(getApplicationContext());


第三步,加载WebView控件

新版H5辅助定位需要加载webView控件,使用下列方法进行加载:

webView = (WebView) findViewById(R.id.webView);


第四步,启动H5辅助定位, 建议在设置WebView属性之前启动H5辅助定位

调用如下方法启动新版H5辅助定位:

//请尽量在设置webView属性之前调用,如果在webView属性之后调用体验可能不如这样好
locationClient.startAssistantLocation(webView);


第五步,设置webView属性

新版H5辅助定位需要设置的webView属性如下:

//加载URL
webView.loadUrl(Utils.URL_H5LOCATION);
//设置webView参数和WebViewClient
WebSettings webSettings = webView.getSettings();
// 允许webview执行javaScript脚本
webSettings.setJavaScriptEnabled(true);


webView.setWebViewClient(new WebViewClient() {
	
	public void onPageFinished(WebView view, String url) {
		super.onPageFinished(view, url);
	}

	public void onPageStarted(WebView view, String url, Bitmap favicon) {
		super.onPageStarted(view, url, favicon);
	}
});

webView.setWebChromeClient(new WebChromeClient() {
	// 处理javascript中的alert
	public boolean onJsAlert(WebView view, String url, String message,
			final JsResult result) {
		return true;
	};

	// 处理javascript中的confirm
	public boolean onJsConfirm(WebView view, String url,
			String message, final JsResult result) {
		return true;
	};

	// 处理定位权限请求
	@Override
	public void onGeolocationPermissionsShowPrompt(String origin,
			Callback callback) {
		callback.invoke(origin, true, false); 
		super.onGeolocationPermissionsShowPrompt(origin, callback);
	}
	@Override
	// 设置网页加载的进度条
	public void onProgressChanged(WebView view, int newProgress) {
		Assistant_Location_Activity.this.getWindow().setFeatureInt(
				Window.FEATURE_PROGRESS, newProgress * 100);
		super.onProgressChanged(view, newProgress);
	}

	// 设置应用程序的标题title
	public void onReceivedTitle(WebView view, String title) {
		super.onReceivedTitle(view, title);
	}
});


第六步,停止辅助定位

当您使用完辅助 H5 页面定位功能时,请及时停止该功能,避免不必要的设备能耗开销。

locationClient.stopAssistantLocation();


JS核心代码

//引入高德JSAPI
<script type="text/javascript" src = 'http://webapi.amap.com/maps?v=1.4.4&test=true&key=8e9d3050695ac868cc67257d84a5f740&plugin=AMap.ToolBar,AMap.IndoorMap'></script>

<script type="text/javascript">
  var log = document.getElementsByClassName('log')[0];
  var map = new AMap.Map('container',{
    resizeEnable: true,
    zoom: 10,
    center: [116.43, 39.9]
  });
  AMap.plugin(['AMap.Geolocation'],
  function(){
    geo  = new AMap.Geolocation({
      useNative:true
    })
    geo.on('complete',function(e){
      log.innerHTML+=e.info+' '+e.position+' '+e.message.split('.')[0]+'</br>'
    })
    geo.on('fail',function(e){
     log.innerHTML+=e.info+e.message.split('.')[0]+'</br>'
    })
  // map.addControl(geo);
});
</script>

//获取位置按钮
<button class = 'bt' onclick='geo.getCurrentPosition()'>获取位置</button>
<button class = 'bt' onclick='geo.watchPosition()'>连续定位</button>
<button class = 'bt' onclick='geo.clearWatch()'>停止定位</button>


移动端
示例中心
功能
在线体验
常见问题