从菜鸟到新手,遇见问题解决问题是家常便饭,今天记录一下遇到的一些问题,希望能对同样被困扰过的同学的一些帮助。
一、修改状态栏背景色,在入口页面加这句代码
plus.navigator.setStatusBarBackground('#000'); //修改状态栏背景色
二、申请私有安卓打包证书
1.下载dcloud公有证书http://download.dcloud.net.cn/HBuilder.keystore
参考这篇文章http://ask.dcloud.net.cn/article/12718
2.使用第三方软件uploader,可以快速申请
三.调用微信和支付宝功能
1.先在demo里找到beecloud.html,把页面做出来
2.去蚂蚁金服和微信开放平台注册开发者账号,并进行开发者资质认证,然后在各自平台创建APP应用,进行各自开发配置,比如回调地址,可以得到返回的订单信息。然后你还要去beecloud官网去注册企业账号,注册完了之后创建支付应用,这里会得到一个APP ID,这个APP ID是需要在hbuilder填写的,然后在这个支付应用里进行交易渠道参数设置,支付宝APP支付和微信APP支付都需要配置,填写的信息就来自你之前在各自开放平台创建的应用。缺少什么就申请什么,比如收款商户。Beecloud的东西都配置好了,支付功能就可以使用了,注意一下,微信支付只有打包之后才行,真机运行会报错。
3.以上的账号申请和各种配置,比较繁琐,但是都有教程,不要急躁,按步骤一步步来,把重要信息保存好。建议在做支付功能之前就开始申请注册,全程需要半个月的审核时间。
四、高德地图定位不准确
细心的同学会发现,在APP开发的时候调用高德地图api进行定位时,会有几百米的偏差,相当蛋疼。查阅资料之后发现是坐标系的问题,需要自己加一个纠偏算法。这里我详细的说一下怎么用。
这是纠偏之前的代码,使用浏览器定位
map = new AMap.Map('container', {
resizeEnable: true
});
//获取定位
map.plugin('AMap.Geolocation', function() {
geolocation = new AMap.Geolocation({
enableHighAccuracy: true,//是否使用高精度定位,默认:true
timeout: 10000, //超过10秒后停止定位,默认:无穷大
buttonOffset: new AMap.Pixel(10, 20),//定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
zoomToAccuracy: true, //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
buttonPosition:'RB'
});
map.addControl(geolocation);
geolocation.getCurrentPosition();
AMap.event.addListener(geolocation, 'complete', onComplete);//返回定位信息
AMap.event.addListener(geolocation, 'error', onError); //返回定位出错信息
});
然后开始纠偏,首先把下面代码复制进来,放在获取定位之前
//纠偏算法
var a = 6378245.0;
var ee = 0.00669342162296594323;
var lnglat = new Array(2);
function transform(wgLon, wgLat) {
console.log(Math.PI);
if(outOfChina(wgLat, wgLon)) {
console.log("outOfChina");
lnglat[0] = wgLon;
lnglat[1] = wgLat;
console.log(lnglat[0] + "|" + lnglat[1]);
return lnglat;
}
var dLat = transformLat(wgLon - 105.0, wgLat - 35.0);
var dLon = transformLon(wgLon - 105.0, wgLat - 35.0);
var radLat = wgLat / 180.0 * Math.PI;
var magic = Math.sin(radLat);
magic = 1 - ee * magic * magic;
var sqrtMagic = Math.sqrt(magic);
dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * Math.PI);
dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * Math.PI);
lnglat[0] = wgLon + dLon;
lnglat[1] = wgLat + dLat;
console.log(lnglat[0] + "|" + lnglat[1] + "|" + dLon + "|" + dLat);
return lnglat;
}
function outOfChina(lat, lon) {
if(lon < 72.004 || lon > 137.8347)
return true;
if(lat < 0.8293 || lat > 55.8271)
return true;
return false;
}
function transformLat(x, y) {
ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
ret += (20.0 * Math.sin(6.0 * x * Math.PI) + 20.0 * Math.sin(2.0 * x * Math.PI)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(y * Math.PI) + 40.0 * Math.sin(y / 3.0 * Math.PI)) * 2.0 / 3.0;
ret += (160.0 * Math.sin(y / 12.0 * Math.PI) + 320 * Math.sin(y * Math.PI / 30.0)) * 2.0 / 3.0;
return ret;
}
function transformLon(x, y) {
ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
ret += (20.0 * Math.sin(6.0 * x * Math.PI) + 20.0 * Math.sin(2.0 * x * Math.PI)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(x * Math.PI) + 40.0 * Math.sin(x / 3.0 * Math.PI)) * 2.0 / 3.0;
ret += (150.0 * Math.sin(x / 12.0 * Math.PI) + 300.0 * Math.sin(x / 30.0 * Math.PI)) * 2.0 / 3.0;
return ret;
}
然后,把之前获取定位的代码修改一下,把打点都false掉,纠偏之后重新打点。
/获取定位
map.plugin('AMap.Geolocation', function() {
geolocation = new AMap.Geolocation({
enableHighAccuracy: true, //是否使用高精度定位,默认:true
timeout: 10000, //超过10秒后停止定位,默认:无穷大
showMarker: false,
showCircle: false,
panToLocation: true,
buttonPosition: 'RB', //定位按钮停靠位置,默认:'LB',左下角
});
map.addControl(geolocation); // 把定位插件加入地图实例
geolocation.getCurrentPosition(function(status, result) {
if(status == "complete") {
var pos = result.position;
var newPos = transform(pos.lng, pos.lat);
var marker = new AMap.Marker({
position: newPos
});
marker.setMap(map);
}
}); // 调用定位
这样定位就比较准确了,目测还会有十米的偏差,但是已经在可接受范围了,基本达到我们的要求。
五、禁用下拉刷新
这个就比较简单了,把这段代码注释掉就可以了,然后重新运行一下,敲重点,要重新运行,否则看不到效果。
down: {
style: 'circle',
callback: function() {
}
},
重写mui.back()这个更简单了
mui.back = function(){
//需要执行的代码
};
还有一些比较常用的代码
plus.webview.currentWebview().close();//关闭当前页面
window.localStorage.removeItem("orderId")//清除本地缓存
暂时想起来这么多,希望能对大家有所帮助
3 个评论
要回复文章请先登录或注册
mustang_xk
2***@qq.com
移动达人