示例中心
功能在线体验
控制台

高德 开发 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]+'<: 10xiR/pre><+newProgr+' 4e.i_bView9.c"md-demo md-atomic">
搜qe_0iv class=go2>JS ta-czc='["导arrowup 该/ \u5904"w, newP_czc && _czc.push _rackEv ', '- /.s浮ode-;\n\t', '点击', 'droid-" hre','1','dev_lt;s'] droid-" hre="/dev/usroidmanifest" /form> -st" ex="/aplugi-lifecycaplugi-s条?lt;sied">该/ \u5904"w, newP_czc && _czc.push _rackEv ', '- /.s浮ode-;\n\t', '点击', '>
br />i/an;该/ \u5904"w, newP_czc && _czc.push _rackEv ', '- /.s浮ode-;\n\t', '点击', '>droid-locat','1','advisory'] 该 class="dvisory/android-location-s var jso">开发foo _"\/a class=foo _"\/a使visib="="首-foo /aipt"> tionsummarfoo _"\/_l/\/ lionsummarfoo _"\/_l/\/_0i v3.8.0以及foo _"导ef=ubmit" data-czc='["导ta-czc='ssagt" 出",""/dev/ticket/list/opened"s/ \ngmd-a-locdroid"/d/ \ngmiv>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>roidmanifecoo;\n bout/us//and于我们="/dev/us>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>roidmanife >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>roidmanifesm"/a/raasport,解决md-d="/dev/us>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>roidmanifest" roid-loca档="/dev/us>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>rlass=ev/us>>>>>>>>tip_top"> lionsummarfoo _"\/_l/\/_1i v3.8.0以及foo _"导ef=ubmit" data-czc='["导sc vowuhezuo出",""/dev/ticket/list/opened"s/ \ngm商合catiod/ \ngmiv>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>roidmanifecoo;\n coo;\n "m商合catio/dev/us>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>roidmanifecoo;\n poi/, nex "m商户标注io/dev/us>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>roidmanifecoo;\n ilog =使 "m室内地图/guide申 cl="/dev/us>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>rlass=ev/us>>>>>>>>tip_top"> lionsummarfoo _"\/_l/\/_2i v3.8.0以及foo _"导ef=ubmit" data-czc='["导apiref="jianw 出",""/dev/ticket/list/opened"s/ \ngmdroid-locatiod/ \ngmiv>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>roidmanifeapi/account/accounta>账号-location-sdiv>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>roidmanifeapi/>JS/feedgres/268/ 反馈="/dev/us>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>roidmanifeapi/>JS/hot-quAMa/android-locat汇总="/dev/us>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>roidmanifei\/a/ ms//a5 页协议="/dev/us>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>rlass=ev/us>>>>>>>>>>>>>>>>e="text/jalionsummarfoo _"\/_l/\/_3i v3.8.0以及foo _"导ef=ubmit" data-czc='["导guanzhu出",""/dev/ticket/list/op"s/ \ngm关 们="d/ \ngmiv> roidata-anc_\u5730idmanife-sdkbdk\/guide\//portl.php/a5 "/apode-="/dev/us>>>>>>>>v> roi0以及foo _sns foo _wx>>>>>>>v> rlass=ev/us>>>>alionsummarfoo _"\/_l/\/_4 foo _865,us_\uocki v3.8.0以及foo _"导eficket/list/opened"ibmit" data-czc='["导Group ","icket/list/op""dev/ticket/list/op"s/ \ngmicket/list/opened健康状-icket/list/opened"搜manresh_"导e.0以及nresh_"导e.