HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

关于地理位置获取使用provider:baidu无法再次获取

现在有A\B两个页面,从A打开B页面,在B页面中获取地址位置并保存在页面中使用,使用的是privider:'baidu'
如果此时从B页面返回之后再打开,就无法获取地址位置信息了。
使用的是安卓手机。

由于项目中已经普遍使用了百度地图,此处就不更换位置格式了。

此处应为bug:
现在有两种解决方案
1、先调用非privider:'baidu'的参数的地址位置获取api,比如privider:'system',在成功的回调函数中直接调用带百度参数的api。
2、直接调用非百度参数的api之后使用百度的接口进行数值转换。转换成百度的位置格式。

继续阅读 »

现在有A\B两个页面,从A打开B页面,在B页面中获取地址位置并保存在页面中使用,使用的是privider:'baidu'
如果此时从B页面返回之后再打开,就无法获取地址位置信息了。
使用的是安卓手机。

由于项目中已经普遍使用了百度地图,此处就不更换位置格式了。

此处应为bug:
现在有两种解决方案
1、先调用非privider:'baidu'的参数的地址位置获取api,比如privider:'system',在成功的回调函数中直接调用带百度参数的api。
2、直接调用非百度参数的api之后使用百度的接口进行数值转换。转换成百度的位置格式。

收起阅读 »

mui h5+ 视频专区

mui

混合app开发课程包含html,css,html5,css3,js,ui,mui,h5+,csatapp.js,php,mysql,混合开发app技术
react native app开发课程,HTML5,CSS3,Javascript,ECMAscript6,React+React Native,php,mysql,React Native课程vip班
最后一天报名时间,今天报名vip课程优惠活动哦,加赠送课程 有意者加qq2971611409,tel:17090057793

继续阅读 »

混合app开发课程包含html,css,html5,css3,js,ui,mui,h5+,csatapp.js,php,mysql,混合开发app技术
react native app开发课程,HTML5,CSS3,Javascript,ECMAscript6,React+React Native,php,mysql,React Native课程vip班
最后一天报名时间,今天报名vip课程优惠活动哦,加赠送课程 有意者加qq2971611409,tel:17090057793

收起阅读 »

部分Android6手机报long-running timer并且卡顿的问题已经初步解决

long_running timer

升级到最新版hbuilder或下载最新的离线打包sdk。
目前的解决方案主要解决的是卡顿问题,控制台依然会输出long-running timer的信息,但不影响卡顿。
这个日志是由于定时监听touch造成的,具体参考https://segmentfault.com/a/1190000006053354

目前发现在同时加载的webview非常多的情况下,新版本也仍然存在卡顿。我们还在优化,开发者也注意减少并发创建和载入太多webview。

继续阅读 »

升级到最新版hbuilder或下载最新的离线打包sdk。
目前的解决方案主要解决的是卡顿问题,控制台依然会输出long-running timer的信息,但不影响卡顿。
这个日志是由于定时监听touch造成的,具体参考https://segmentfault.com/a/1190000006053354

目前发现在同时加载的webview非常多的情况下,新版本也仍然存在卡顿。我们还在优化,开发者也注意减少并发创建和载入太多webview。

收起阅读 »

mui h5+最佳课程

5+App开发 HelloH5 mui

app开发包含课程html,css,html5,css3,js,ui,mui,h5+,csatapp.js,php,mysql,混合开发app
react native app开发课程,HTML5,CSS3,Javascript,ECMAscript6,React+React Native,php,mysql,React Native课程vip班
今天是优惠活动哦加赠送课程 有意者加qq2971611409,tel:17090057793
进入教室

继续阅读 »

app开发包含课程html,css,html5,css3,js,ui,mui,h5+,csatapp.js,php,mysql,混合开发app
react native app开发课程,HTML5,CSS3,Javascript,ECMAscript6,React+React Native,php,mysql,React Native课程vip班
今天是优惠活动哦加赠送课程 有意者加qq2971611409,tel:17090057793
进入教室

收起阅读 »

解决边改边看模式下web浏览器不显示内容的问题

HBuilder版本: 7.4.1
问题:在WindowsXP下是正常的,换到win8.1(64位)后,在边改边看模式下Web浏览器无法显示内容,此外也缺少内置的一些浏览器宽高设置参数。
解决方法如下:在边改边看模式下,将web浏览器窗口放大,在其顶部的输入框中输入当前正在编辑的html页面的完整地址即可。只需要输入当前页面的地址,打开其他页面的时候就可以自动识别显示。
完整的地址格式:
http://127.0.0.1:8020/XXX/html/query_bill.html
其中XXX为具体的项目名称,之后的页面地址是在该项目下的相对地址。

继续阅读 »

HBuilder版本: 7.4.1
问题:在WindowsXP下是正常的,换到win8.1(64位)后,在边改边看模式下Web浏览器无法显示内容,此外也缺少内置的一些浏览器宽高设置参数。
解决方法如下:在边改边看模式下,将web浏览器窗口放大,在其顶部的输入框中输入当前正在编辑的html页面的完整地址即可。只需要输入当前页面的地址,打开其他页面的时候就可以自动识别显示。
完整的地址格式:
http://127.0.0.1:8020/XXX/html/query_bill.html
其中XXX为具体的项目名称,之后的页面地址是在该项目下的相对地址。

收起阅读 »

关于IOS触发click事件无法接收payload的解决办法

纠结了一个下午才搞定的一个问题,闲话不多说给大家分享一下
推送工具:个推
个推的透传消息模版有一个参数:payload,这个参数就是在触发click事件传输的值。
template.setPushInfo(actionLocKey, badge, message, sound, payload, locKey, locArgs, launchImage);模版可以从个推文档查到

receive的值不用改还用:transContent的标准格式写法
监听接收的方法:
switch(msg.type){
case "click":
receiveMsg = msg.payload.payload;
break;
case "receive":
receiveMsg = msg.payload;
break;
}

希望这能够节省一下大家的时间,有不同的方法的同学,可以留言指教!

继续阅读 »

纠结了一个下午才搞定的一个问题,闲话不多说给大家分享一下
推送工具:个推
个推的透传消息模版有一个参数:payload,这个参数就是在触发click事件传输的值。
template.setPushInfo(actionLocKey, badge, message, sound, payload, locKey, locArgs, launchImage);模版可以从个推文档查到

receive的值不用改还用:transContent的标准格式写法
监听接收的方法:
switch(msg.type){
case "click":
receiveMsg = msg.payload.payload;
break;
case "receive":
receiveMsg = msg.payload;
break;
}

希望这能够节省一下大家的时间,有不同的方法的同学,可以留言指教!

收起阅读 »

dclouder 连接蓝牙

Android 蓝牙

搞了很久,终于搞出来的,但是还不是很友好,目前,js不能开启多线程,只能 一次取完了数据,就关闭socket,下次再取数据,的时候,
在开启socket 获取完了,关闭;不能一直开着socket ,不然会阻塞当前主线程,什么也干不了,有没有大神指导这种情况如何处理,怎样才能,一直开着socket ,不停地解析传过来的包,不阻塞主线程呢,我是使用dclouder连接了蓝牙设备,蓝牙发信号,然后手机接收 数据,

先是搜索:
console.log("search::isOpen="+isOpen);
if(isOpen==true) return;
main = plus.android.runtimeMainActivity();
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
var BluetoothDevice = plus.android.importClass("android.bluetooth.BluetoothDevice");
console.log("开始搜索设备");
var filter = new IntentFilter();
// var bdevice = new BluetoothDevice();
var BleDevice = new BluetoothDevice();
disableBtn(true);
BAdapter.startDiscovery(); //开启搜索
var receiver;
receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {
onReceive: function(context, intent) { //实现onReceiver回调函数
plus.android.importClass(intent); //通过intent实例引入intent类,方便以后的‘.’操作
if(intent.getAction() == "android.bluetooth.adapter.action.DISCOVERY_FINISHED") {
main.unregisterReceiver(receiver); //取消监听
disableBtn(false);
plus.nativeUI.toast("搜索结束");
console.log("搜索结束");
} else {
BleDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if(BleDevice==null){main.unregisterReceiver(receiver); //取消监听
disableBtn(false); return;}
var name=BleDevice.getAddress()+BleDevice.getName();
if(bleArray.indexOf(name)==-1){
bleArray.push(name);
addNode(table,BleDevice.getAddress(),BleDevice.getName());
}//开始判断
var lastBLE = localStorage.getItem('lastBLE');
console.log("lastBLE::"+lastBLE);
if(lastBLE!=null&&lastBLE==BleDevice.getAddress()){
main.unregisterReceiver(receiver); //取消监听
disableBtn(false);
ConnectEqu(lastBLE);
}

                }  
            }  
        });   
        filter.addAction(BleDevice.ACTION_FOUND);  
        filter.addAction(BAdapter.ACTION_DISCOVERY_STARTED);  
        filter.addAction(BAdapter.ACTION_DISCOVERY_FINISHED);  
        filter.addAction(BAdapter.ACTION_STATE_CHANGED);  
        main.registerReceiver(receiver, filter); //注册监听   

搜索完了,开始连接蓝牙:

main = plus.android.runtimeMainActivity();  
        BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");  
        UUID = plus.android.importClass("java.util.UUID");  
        uuid = UUID.fromString(FETUS_UUID);  
        BAdapter = BluetoothAdapter.getDefaultAdapter();  
        device = BAdapter.getRemoteDevice(mac_address);  
        plus.android.importClass(device);  
        bluetoothSocket=null;  
        bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);  
        plus.android.importClass(bluetoothSocket);  
        if(!bluetoothSocket.isConnected()) {       
            bluetoothSocket.connect();  
        }             
       if(bluetoothSocket.isConnected()) {   
        isOpen=true;  
        console.log("search::isOpen="+isOpen);  
        console.log('设备已连接'); //连接成功做标记,下次直接连接  

// localStorage.setItem('lastBLE',mac_address);
// var lastBLE =localStorage.getItem('lastBLE');
// console.log("lastBLE::"+lastBLE);
var inputStream = bluetoothSocket.getInputStream();
plus.android.importClass(inputStream);
var msg =null;
try{
var msg ;//= br.readLine();
while(isOpen){
var msg=inputStream.read();
console.log(msg);
parseData(msg);
}
// }
//地址:http://ask.dcloud.net.cn/question/60
}catch(err){
console.log("异常"+err);
}
}

附件是完整的代码:

继续阅读 »

搞了很久,终于搞出来的,但是还不是很友好,目前,js不能开启多线程,只能 一次取完了数据,就关闭socket,下次再取数据,的时候,
在开启socket 获取完了,关闭;不能一直开着socket ,不然会阻塞当前主线程,什么也干不了,有没有大神指导这种情况如何处理,怎样才能,一直开着socket ,不停地解析传过来的包,不阻塞主线程呢,我是使用dclouder连接了蓝牙设备,蓝牙发信号,然后手机接收 数据,

先是搜索:
console.log("search::isOpen="+isOpen);
if(isOpen==true) return;
main = plus.android.runtimeMainActivity();
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
var BluetoothDevice = plus.android.importClass("android.bluetooth.BluetoothDevice");
console.log("开始搜索设备");
var filter = new IntentFilter();
// var bdevice = new BluetoothDevice();
var BleDevice = new BluetoothDevice();
disableBtn(true);
BAdapter.startDiscovery(); //开启搜索
var receiver;
receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {
onReceive: function(context, intent) { //实现onReceiver回调函数
plus.android.importClass(intent); //通过intent实例引入intent类,方便以后的‘.’操作
if(intent.getAction() == "android.bluetooth.adapter.action.DISCOVERY_FINISHED") {
main.unregisterReceiver(receiver); //取消监听
disableBtn(false);
plus.nativeUI.toast("搜索结束");
console.log("搜索结束");
} else {
BleDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if(BleDevice==null){main.unregisterReceiver(receiver); //取消监听
disableBtn(false); return;}
var name=BleDevice.getAddress()+BleDevice.getName();
if(bleArray.indexOf(name)==-1){
bleArray.push(name);
addNode(table,BleDevice.getAddress(),BleDevice.getName());
}//开始判断
var lastBLE = localStorage.getItem('lastBLE');
console.log("lastBLE::"+lastBLE);
if(lastBLE!=null&&lastBLE==BleDevice.getAddress()){
main.unregisterReceiver(receiver); //取消监听
disableBtn(false);
ConnectEqu(lastBLE);
}

                }  
            }  
        });   
        filter.addAction(BleDevice.ACTION_FOUND);  
        filter.addAction(BAdapter.ACTION_DISCOVERY_STARTED);  
        filter.addAction(BAdapter.ACTION_DISCOVERY_FINISHED);  
        filter.addAction(BAdapter.ACTION_STATE_CHANGED);  
        main.registerReceiver(receiver, filter); //注册监听   

搜索完了,开始连接蓝牙:

main = plus.android.runtimeMainActivity();  
        BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");  
        UUID = plus.android.importClass("java.util.UUID");  
        uuid = UUID.fromString(FETUS_UUID);  
        BAdapter = BluetoothAdapter.getDefaultAdapter();  
        device = BAdapter.getRemoteDevice(mac_address);  
        plus.android.importClass(device);  
        bluetoothSocket=null;  
        bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);  
        plus.android.importClass(bluetoothSocket);  
        if(!bluetoothSocket.isConnected()) {       
            bluetoothSocket.connect();  
        }             
       if(bluetoothSocket.isConnected()) {   
        isOpen=true;  
        console.log("search::isOpen="+isOpen);  
        console.log('设备已连接'); //连接成功做标记,下次直接连接  

// localStorage.setItem('lastBLE',mac_address);
// var lastBLE =localStorage.getItem('lastBLE');
// console.log("lastBLE::"+lastBLE);
var inputStream = bluetoothSocket.getInputStream();
plus.android.importClass(inputStream);
var msg =null;
try{
var msg ;//= br.readLine();
while(isOpen){
var msg=inputStream.read();
console.log(msg);
parseData(msg);
}
// }
//地址:http://ask.dcloud.net.cn/question/60
}catch(err){
console.log("异常"+err);
}
}

附件是完整的代码:

收起阅读 »

福利来了MUI完整视频教程更新中(5日内完成全部章节)

mui

使用dcloud做了一个还算不小的app项目,感觉非常不错。给大家录制了MUI的视频教程,随后将录制 H5+,APP项目开发实例教程。MUI完整视频教程更新中(5日内完成全部章节)。

视频教程观看地址:
http://www.hcoder.net/course/info_211.html

交流群:335126794

继续阅读 »

使用dcloud做了一个还算不小的app项目,感觉非常不错。给大家录制了MUI的视频教程,随后将录制 H5+,APP项目开发实例教程。MUI完整视频教程更新中(5日内完成全部章节)。

视频教程观看地址:
http://www.hcoder.net/course/info_211.html

交流群:335126794

收起阅读 »

mui的选择器,ID访问方式必须用索引值吗?

请教 mui("#pageTitle")通过ID返回的对象不唯一,必须用mui("#pageTitle")[0]访问才行,为什么??哪位能解释一下?

请教 mui("#pageTitle")通过ID返回的对象不唯一,必须用mui("#pageTitle")[0]访问才行,为什么??哪位能解释一下?

webservices接口调用

ajax js

/**

  • 调用Webservices方法,
  • methodName调用webservices方法名称,
  • paramTag提交的参数标签字符串,例参数名cmd参数值1,<cmd>1</cmd>
  • completeMethod 请求结束的回调方法
    */
    function goWebservices(methodName,paramTag,completeMethod){
    var data = getWebservicesData(methodName,paramTag);
    var webservicesUrl = getWebservicesUrl();
    //alert(data);
    mui.ajax({
    url:webservicesUrl,
    type:'POST',
    dataTyle:'xml',
    data:data,
    timeout:10000,//超时时间设置为10秒;
    complete:completeMethod,
    beforeSend:function(request){
    request.setRequestHeader('SOAPAction','')
    },
    contentType:'text/xml; charset=\"utf-8\"'
    });
    }
    /**
  • 获得webservice请求参数xml报文
  • @param {Object} functionName
  • @param {Object} paramTag
    */
    function getWebservicesData(functionName,paramTag){
    var data='<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">';
    data = data + '<soap:Body>';
    data = data + '<'+functionName+' xmlns="http://sh.inobido.com/">';
    data = data + paramTag;
    data = data + '</'+functionName+'>';
    data = data + '</soap:Body>';
    data = data + '</soap:Envelope>';
    return(data);
    }
继续阅读 »

/**

  • 调用Webservices方法,
  • methodName调用webservices方法名称,
  • paramTag提交的参数标签字符串,例参数名cmd参数值1,<cmd>1</cmd>
  • completeMethod 请求结束的回调方法
    */
    function goWebservices(methodName,paramTag,completeMethod){
    var data = getWebservicesData(methodName,paramTag);
    var webservicesUrl = getWebservicesUrl();
    //alert(data);
    mui.ajax({
    url:webservicesUrl,
    type:'POST',
    dataTyle:'xml',
    data:data,
    timeout:10000,//超时时间设置为10秒;
    complete:completeMethod,
    beforeSend:function(request){
    request.setRequestHeader('SOAPAction','')
    },
    contentType:'text/xml; charset=\"utf-8\"'
    });
    }
    /**
  • 获得webservice请求参数xml报文
  • @param {Object} functionName
  • @param {Object} paramTag
    */
    function getWebservicesData(functionName,paramTag){
    var data='<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">';
    data = data + '<soap:Body>';
    data = data + '<'+functionName+' xmlns="http://sh.inobido.com/">';
    data = data + paramTag;
    data = data + '</'+functionName+'>';
    data = data + '</soap:Body>';
    data = data + '</soap:Envelope>';
    return(data);
    }
收起阅读 »

HBuilder使用夜神安卓模拟器进行模拟器调试配置软件

真机调试

根据网友调试经验,总结,做的小软件。

HBuilder连接夜神安卓模拟器进行调试,是比较好的,因为夜神安卓模拟器比较强大,而且可以自定义硬件分配(但没感觉有什么效果( ° △ °|||)︴)。

已经修改……

根据网友调试经验,总结,做的小软件。

HBuilder连接夜神安卓模拟器进行调试,是比较好的,因为夜神安卓模拟器比较强大,而且可以自定义硬件分配(但没感觉有什么效果( ° △ °|||)︴)。

已经修改……

App store 应用审核由于 IPv6 网络问题被拒的一点分析

六月以后陆续有一些软件提交市场的时候被拒了,症状基本就是无法登陆啥的。我们公司的应用也未能幸免。

很多同学也想了不少办法,申诉、拍视频啥的都有,有人成功有人失败。但是如果苹果不能再自己的测试环境下测试成功,基本就还是要被拒的。

先分析一下情况,很多开发者抱怨自己按照苹果给出的方法,在自己电脑上搭了 IPv6 的环境测试了,没有问题,为啥一提交审核就不行了呢?这里就要看一下本机搭的这个 IPv6 环境到底是怎么回事,它到底能验证什么。

苹果提供的方法是帮我们创建一个 NAT64 的网络,这里先要搞清楚啥是 NAT64. 其实简单来说,就是这样的:

Mac 创建的 IPv6 网络
所以,手机和 Mac 之间是 IPv6 没错,但 Mac 和你的服务器之间还是 IPv4 连接。如果这项测试通过,可以说明:你的客户端应用在 IPv6 网络下,是(基本)没有问题的,但是无法验证你的服务器能够对 IPv6 网络做出正确的响应。

然而,苹果审核的时候,却是要去 DNS 服务器询问你的服务器的 IPv6 地址,然后进行访问。如果查询不到 IPv6 地址,可能会进而询问 IPv4 地址,然后进行转换使用。苹果明确表示服务器不需要支持 IPv6,但是有一点苹果没有指出来,那就是,虽然你的服务器不用支持 IPv6,但是必须正确响应 IPv6 的 DNS 查询。

如何验证呢??使用以下命令即可:

$ dig +nocmd +nostats example.com AAAA
如果返回的 status 为 NOERROR, 那基本就没什么问题,但是一定要在多个网络环境下测试都通过才行。如果返回的是其他的响应,尤其是 SERVFAIL 的情况,那就基本杯具了。由于你已经验证了客户端没有问题,现在要做的,就是催着你的运维、后台啥的,赶紧去改 DNS 配置,直到稳定返回 NOERROR 为止。
原文地址:http://www.jianshu.com/p/d18ada23f78d

继续阅读 »

六月以后陆续有一些软件提交市场的时候被拒了,症状基本就是无法登陆啥的。我们公司的应用也未能幸免。

很多同学也想了不少办法,申诉、拍视频啥的都有,有人成功有人失败。但是如果苹果不能再自己的测试环境下测试成功,基本就还是要被拒的。

先分析一下情况,很多开发者抱怨自己按照苹果给出的方法,在自己电脑上搭了 IPv6 的环境测试了,没有问题,为啥一提交审核就不行了呢?这里就要看一下本机搭的这个 IPv6 环境到底是怎么回事,它到底能验证什么。

苹果提供的方法是帮我们创建一个 NAT64 的网络,这里先要搞清楚啥是 NAT64. 其实简单来说,就是这样的:

Mac 创建的 IPv6 网络
所以,手机和 Mac 之间是 IPv6 没错,但 Mac 和你的服务器之间还是 IPv4 连接。如果这项测试通过,可以说明:你的客户端应用在 IPv6 网络下,是(基本)没有问题的,但是无法验证你的服务器能够对 IPv6 网络做出正确的响应。

然而,苹果审核的时候,却是要去 DNS 服务器询问你的服务器的 IPv6 地址,然后进行访问。如果查询不到 IPv6 地址,可能会进而询问 IPv4 地址,然后进行转换使用。苹果明确表示服务器不需要支持 IPv6,但是有一点苹果没有指出来,那就是,虽然你的服务器不用支持 IPv6,但是必须正确响应 IPv6 的 DNS 查询。

如何验证呢??使用以下命令即可:

$ dig +nocmd +nostats example.com AAAA
如果返回的 status 为 NOERROR, 那基本就没什么问题,但是一定要在多个网络环境下测试都通过才行。如果返回的是其他的响应,尤其是 SERVFAIL 的情况,那就基本杯具了。由于你已经验证了客户端没有问题,现在要做的,就是催着你的运维、后台啥的,赶紧去改 DNS 配置,直到稳定返回 NOERROR 为止。
原文地址:http://www.jianshu.com/p/d18ada23f78d

收起阅读 »