H5开发的App离线打包遇到的问题


一、地图展示问题

问题描述:离线打包调试app,发现地图打开了,但是获取当前位置定位无任何效果,地图使用的是天地图,引入天地图的js,实现调用,获取手机用户当前定位的方法是plus.geolocation.getCurrentPosition。

//手机用户定位位置
function userLocation(addrpoint) {
			//获取用户的当前位置信息设备GPS坐标信息
			plus.geolocation.getCurrentPosition(function(p){
				// console.log(p.addresses);
				// console.log(JSON.stringify(p.address));
				// console.log(p.coordsType);
				// console.log(p.coords.longitude);
				// console.log(p.coords.latitude);
				var gpsPoint = new plus.maps.Point(p.coords.longitude, p.coords.latitude);//将				    坐标转为mui的点对象
				var cgcs2000Point = gpsPoint;//目前CGCS2000和WGS84区别不大认为他们是相容的。所以不做转换了
				var point = (addrpoint instanceof plus.maps.Point) ? addrpoint : cgcs2000Point;//转为mui的point对象
				map.centerAndZoom(new T.LngLat(point.getLng(), point.getLat()), zoom);
				getPlace(point);
				createMarker(point);
			},function(e){
					console.log('Geolocation error: ' + e.message);
			},{provider:'system'}); //provider 取值: "system":系统定位, "baidu":百度定位, 	         "amap":高德定位, 默认 amap>baidu>system
};

解决方法:

1.使用该h5的方法,修改相关provider的参数为baidu

//手机用户定位位置
function userLocation(addrpoint) {
			//console.log(JSON.stringify(addrpoint))
			//获取用户的当前位置信息设备GPS坐标信息
			plus.geolocation.getCurrentPosition(function(p){
				// console.log(p.addresses);
				// console.log(JSON.stringify(p.address));
				// console.log(p.coordsType);
				// console.log(JSON.stringify(p));
				//var gpsPoint = new plus.maps.Point(p.coords.longitude, p.coords.latitude);//将坐标转为mui的点对象
				(2)根据获取的到的p的坐标系类型为gcj02,然后调用封装好的js的方法 把gcj02坐标转成天地图的WGS84  
				let gps= gcj02towgs84(p.coords.longitude, p.coords.latitude);
				var gpsPoint = new plus.maps.Point(gps.lng,gps.lat);//将坐标转为mui的点对象
				var cgcs2000Point = gpsPoint;//目前CGCS2000和WGS84区别不大认为他们是相容的。所以不做转换了
				var point = (addrpoint instanceof plus.maps.Point) ? addrpoint : cgcs2000Point;//转为mui的point对象			
				map.centerAndZoom(new T.LngLat(point.getLng(), point.getLat()), zoom);
				getPlace(point);
				createMarker(point);
			},function(e){
					console.log('Geolocation error: ' + e.message);
},{provider:'baidu'});(1)修改参数 //provider 取值: "system":系统定位, "baidu":百度定位, "amap":高德定位, 默认 amap>baidu>system

2.离线打包配置

  1. 需要拷贝的文件
    需要引入工程的jar文件

需要将以下jar文件放到工程的libs目录下
SDK\libs baidu-libs-release.aar,map-baidu-release.aar

  1. Androidmainfest.xml文件需要修改的项
    需要在application节点前添加权限:
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
        <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
        <uses-permission android:name="android.permission.READ_LOGS"/>
        <uses-permission android:name="android.permission.WRITE_SETTINGS"/>

application节点下配置如下代码:

<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="%appkey_android%"></meta-data>
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>
  1. dcloud_properties.xml文件需要修改的项

dcloud_properties.xml文件在assets/data目录下

features节点下添加:

<feature name="Maps" value="io.dcloud.js.map.JsMapPluginImpl"></feature>

services节点下添加:

<service name="Maps"   value="io.dcloud.js.map.MapInitImpl" />

再调试,即可测试获取当前定位能不能正常使用。

二、自动更新问题

问题描述:点击app进入初始化,弹出自动更新页面,但是更新完之后,弹出不了安装界面,安装不了最新版本的app,这样就导致app每次初始化的时候都会提示需要更新,调试发现自动更新代码里的调用 plus.runtime.install 不起作用
在这里插入图片描述
解决方法:

1.将build.gradle中的targetSdkVersion调到26或者更高。

2.在Androidmanifest.xml 的application子节点下添加provider节点,将里面的XXXX.XXX.XX改成 build.gradle 里的 applicationId的值。

  <!--自动更新安装需要-->
        <provider
            android:name="io.dcloud.common.util.DCloud_FileProvider"
            android:authorities="XXXX.XXX.XX(当前的应用包名).dc.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/dcloud_file_provider" />
        </provider>

3.在Androidmanifest.xml 根节点中添加权限

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>  

4.可以在生成离线打包前,配置 manifest.json 权限,把相关自动更新的权限都给勾上。
在这里插入图片描述
完成以上配置,在调试即可解决问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值