昨天用HBuilder封装MUI做了一个混合开发APP。 遇到问题:真机测试可以获取设备位置,但是打包成APP后获取不到。 那么……(来自百度)
首先介绍一下百度地图的两个socket文件。
其次html5定位,JS部分代码。 HTML5获取位置需要一定的时间,所以下面调用百度地图传入经纬度,并添加一个定时器,5秒后调用百度地图。
var map = new BMap.Map("allmap");
var longitude, latitude;
navigator.geolocation.getCurrentPosition(function (position) {
//获取经纬度
longitude = position.coords.longitude;
latitude = position.coords.latitude;
});
setTimeout(function () {
//调用百度接口
var gpsPoint = new BMap.Point(longitude, latitude);
BMap.Convertor.translate(gpsPoint, 0, function (point) {
var geoc = new BMap.Geocoder();
geoc.getLocation(point, function (rs) {
var addComp = rs.surroundingPois[0].address;
alert(addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber);
alert(JSON.stringify(addComp));
console.log(JSON.stringify(addComp));
});
});
}, 5000);
补充:以上方法,华为/iphone测试没问题html5定位,定位准确。 不过,在用真机小米4测试时,出现了兼容性问题。 无法获取经纬度,返回undefined。 于是,两个前端朋友一起帮我解决了这个问题。 折腾了半夜,小米真是有毒啊~~
解决办法如下(仍然需要上面介绍的两个JS文件):
//调用百度接口
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r) {
if (this.getStatus() == BMAP_STATUS_SUCCESS) {
var myGeo = new BMap.Geocoder();
myGeo.getLocation(new BMap.Point(r.point.lng, r.point.lat), function(rs) {
// 打印返回值
// console.log(JSON.stringify(rs));
if(rs.surroundingPois.length >0){
// 我们只取了其中一个位置信息
dwaddr = rs.address + rs.surroundingPois[0].title;
}else{
dwaddr = rs.address;
}
});
}
});
最终,虽然解决了红米无法获取位置信息的问题,但是获取的位置并不准确。 例如:实际位置在杭州市滨江区,但小米位置返回结果却在江干区。 相差甚远~目前以我的能力还无法解决这个问题。
发表评论