移动端h5获取定位Andriod嵌入超时无作为问题
twocode

在移动端h5使用

    navigator.geolocation.getCurrentPosition(success, error)

获取方法时,手机浏览器和微信嵌入的浏览器,无论关闭与否,实施定位是没有问题;但是普通的andriod app嵌入h5页面功能时,关闭手机app定位权限后err.调函数是不能生效的,必须添加第三个参数options:timeout: 5000, //超时,毫秒 ,规定超时时间

navigator.geolocation.getCurrentPosition(success, error, options)

搜索到的相关信息是国行Android由于被阉割了谷歌的GMS服务,导致能正常调用 getCurrentPosition 函数但永远无法正常触发回调。(具体机制不详)而部分国内的浏览器对 getCurrentPosition 进行了重新封装。

参考代码:

	     if (navigator.geolocation) { 	navigator.geolocation.getCurrentPosition(success,error,options);
		  
	} else {  
		alert('抱歉!您的浏览器无法使用地位功能');  
	}
	
	var msg = '';
	
	var success = function(pos) {  
			// A callback function that takes a Position object as its sole input parameter.  
			// 成功回调函数,接受一个地理位置的对象作为参数。  
			// https://developer.mozilla.org/en-US/docs/Web/API/Position 参数说明  
			pos.coords.latitude// 维度;

			pos.coords.longitude// 经度

			pos.coords.accuracy// 准确度

			pos.coords.altitude//  海拔(mpos.coords.altitudeAccuracy// 海拔准确度(m)

			pos.coords.headig//  行进方向 相对于正北而言

			pos.coords.speed// 地面速度 m/s
		};
	var error = function(err) { 
			// 错误的回调  
			// 参考 https://developer.mozilla.org/en-US/docs/Web/API/Positionerr.错误参数  
			//错误号
			switch (err.code) {
				case 0:
					msg = "There was an error while retrieving your location.Additional details:" + err.message;
					break;
				case 1:
					msg = "The user opted not to share his or her location details:" + err.message;
					break;
				case 2:
					msg = "the browser was uable to determine your location. Additional details:" + err.message;
					break;
				case 3:
					msg = "The browser timed out before retrieving the location";
					break;
			}
			
			console.log(msg);
			
			
		};
	var options = {  
			enableHighAccuracy: true, // 是否获取高精度结果  
			timeout: 5000, //超时,毫秒  
			maximumAge: 0 //可以接受多少毫秒的缓存位置  
			// 详细说明 https://developer.mozilla.org/en-US/docs/Web/API/PositionOptions  
		};

    


网友评论已关闭