收藏
回答

同样的程序,安卓手机不好使但是开发者工具,苹果都好使

框架类型 问题类型 终端类型 微信版本 基础库版本
小程序 Bug 工具 6.6.7 2.2.0

一个控制蓝牙小灯的程序,在ios上和开发者工具里面都能正常的延时,但是就是安卓手机不可以。这是什么情况。


出问题的地方就是那个timer函数,安卓手机并没有执行延时而是直接跳过去了,进行下一步的指令了。


var app = getApp();

var display = new Array();

var inst = new Array();

var value = new Array();

var index = 0;

var inputValue = '';

var inputInst = '';


var current = 0;

var x = 0;


let buffer = new ArrayBuffer(20)

let dataView = new DataView(buffer)

dataView.setUint8(0, 0)

dataView.setUint8(1, 0)

dataView.setUint8(2, 0)

dataView.setUint8(3, 0)

dataView.setUint8(4, 0)

dataView.setUint8(5, 0)

dataView.setUint8(6, 0)

dataView.setUint8(7, 0)

dataView.setUint8(8, 0)

dataView.setUint8(9, 0)

dataView.setUint8(10, 0)

dataView.setUint8(11, 0)

dataView.setUint8(12, 0)

dataView.setUint8(13, 0)

dataView.setUint8(14, 0)

dataView.setUint8(15, 0)

dataView.setUint8(16, 0)

dataView.setUint8(17, 0)

dataView.setUint8(18, 0)

dataView.setUint8(19, 0)


Page({

data: {

instructions: ['关闭', '开启', '延时'],

},



onUnload: function () {

wx.closeBLEConnection({

deviceId: app.globalData.targetAdd,

success: function (res) {

app.globalData.connectFlag = false,

app.globalData.searchFlag = false,

app.globalData.targetAdd = 'NoAdd',

console.log(res)

console.log('app.globalData.connectFlag', app.globalData.connectFlag)

console.log('app.globalData.searchFlag', app.globalData.searchFlag)

console.log('app.globalData.targetAdd', app.globalData.targetAdd)


}

})

},



bindPickerChange: function (e) {

console.log('picker发送选择改变,携带值为', e.detail.value)

if (e.detail.value == 0) {

inputInst = '关闭';

}

if (e.detail.value == 1) {

inputInst = '开启';

}

if (e.detail.value == 2) {

inputInst = '延时';

}


this.setData({

index: e.detail.value

})

console.log('指令值: ', inputInst)

},


inputDone: function (e) {

inputValue = e.detail.value

},


inputInstructions: function () {

inst.push(inputInst)

console.log('指令数组', inst)


value.push(inputValue)

console.log('值数组', value)


display.push(inputInst + ": " + inputValue)

console.log('显示数组', display)


this.setData({

display: display

})

},


deleteInstructions: function () {

inst.splice(inst.length - 1, 1)

value.splice(value.length - 1, 1)

display.splice(display.length - 1, 1)

this.setData({

display: display

})

},


run: function () {

if (current < inst.length) {

switch (inst[current]) {

case '开启':

this.runStart();

break;

case '关闭':

this.runStop();

break;

case '延时':

this.runDelay();

break;

}

} else {

current = 0

}

},


runStart: function () {

dataView.setUint8(value[current] - 1, 1)

wx.writeBLECharacteristicValue({

deviceId: app.globalData.targetAdd,

serviceId: '0000FFF0-0000-1000-8000-00805F9B34FB',

characteristicId: '0000FFF6-0000-1000-8000-00805F9B34FB',

value: buffer,

success: function (res) {

console.log('writeBLECharacteristicValue success', res)

},

fail: function (res) {

console.log("wrong", res)

}

})

console.log(inst[current], value[current], current)

current++;

this.run();

},


runStop: function () {

dataView.setUint8(value[current] - 1, 0)

wx.writeBLECharacteristicValue({

deviceId: app.globalData.targetAdd,

serviceId: '0000FFF0-0000-1000-8000-00805F9B34FB',

characteristicId: '0000FFF6-0000-1000-8000-00805F9B34FB',

value: buffer,

success: function (res) {

console.log('writeBLECharacteristicValue success', res)

},

fail: function (res) {

console.log("wrong", res)

}

})

console.log(inst[current], value[current], current)

current++;

this.run();

},


runDelay: function () {

console.log(inst[current], value[current], current)

this.timer()

// if (x < value[current]) {

//   this.timer();

// } else {

//   x = 0

//   current++

//   this.run()

// }


},


timer: function () {

const that = this

setTimeout(function () {

// x++;

// console.log('x', x)

current++

that.run()

}, value[current])

}


})


回答关注问题邀请回答
收藏

1 个回答

  • 社区技术运营专员-灵芝
    社区技术运营专员-灵芝
    2018-07-30

    你好,请提供出现问题的机型和微信版本,以及能复现问题的简单代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。

    2018-07-30
    有用
    回复 13
    • 电工
      电工
      2018-07-30

      苹果是 5s

      安卓是 Galaxy 4s 和华为P20 pro

      微信都是最新版本的。

      代码片段:wechatide://minicode/ROcJpimW7RpW

      补充一下:就是最后的编程模式的延时指令执行起来有问题,安卓直接跳过延时,瞬间就执行下一个指令了。苹果和开发工具都没有这个问题。

      2018-07-30
      回复
    • 社区技术运营专员-灵芝
      社区技术运营专员-灵芝
      2018-07-30回复电工

      你好,代码片段没有明确复现问题的具体操作,请详细描述

      2018-07-30
      回复
    • 电工
      电工
      2018-07-30回复社区技术运营专员-灵芝

      通过扫码,搜索,进入编程模式之后,用户会输入指令(关闭,开启,延时)以及指令的值(开启关闭的MOS管的编号,延时的毫秒值)。在指令输入完后用户点击执行按钮会根据输入的指令顺序开始自动给连接的蓝牙模块发送指令。

      在使用延时指令时,ios和开发工具都可以正常的根据延时指令的值来进行延时一段时间后再给蓝牙模块发送下一条。但是安卓手机就会直接跳过延时指令(会执行延时指令,但是不延时,好像是延时的值没有传递进去)立即进行之后的指令。就是program页面的timer函数的问题。

      2018-07-30
      回复
    • 电工
      电工
      2018-07-30回复社区技术运营专员-灵芝

      对了,为了便于你测试方便你可以把index页面里面的programMode函数里面的都注释掉,再把那个页面跳转的注释出来这样不需要连接蓝牙设备了。

      2018-07-30
      回复
    • 社区技术运营专员-灵芝
      社区技术运营专员-灵芝
      2018-07-30回复电工

      要不你再提供一个简洁一点的,并且能复现问题的代码片段( https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html 

      2018-07-30
      回复
    查看更多(8)
登录 后发表内容