1、安卓机接受不到特征值,苹果手机可以
解决:安卓订阅之前要设置最大传输单元 255
var u = navigator.userAgent, app = navigator.appVersion;
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; // Android
if(isAndroid){
plus.bluetooth.setBLEMTU({
deviceId:deviceId,
mtu:255,
success:function(e){
0 && console.log('set MTU success: '+JSON.stringify(e));
},
fail:function(e){
console.log('set MTU failed: '+JSON.stringify(e));
}
});
}
www.html5plus.org/doc/zh_cn/b…
2、当监测到安卓手机有来电时,发送命令给设备,设备进行灯光闪烁提示并伴随马达震动。安卓手机如何监测手机有来电提醒?
解决:
document.addEventListener('plusready', function() {
var receiver, main, context, TelephonyManager;
context = plus.android.importClass('android.content.Context');
TelephonyManager = plus.android.importClass('android.telephony.TelephonyManager'); //通话管理
main = plus.android.runtimeMainActivity(); //获取activity
receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: doReceive //实现onReceiver回调函数
});
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
var Intent = plus.android.importClass('android.content.Intent');
var filter = new IntentFilter();
//filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); //监听飞行模式
filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); //监听电话状态
main.registerReceiver(receiver, filter); //注册监听
function doReceive(context, intent) {
plus.android.importClass(intent);
var phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER),
telephony = context.getSystemService(context.TELEPHONY_SERVICE),
state = telephony.getCallState();
switch (state) {
// 等待接听电话
case TelephonyManager.CALL_STATE_RINGING:
console.log("[Broadcast]等待接电话=" + phoneNumber);
break;
case TelephonyManager.CALL_STATE_IDLE:
console.log("[Broadcast]电话挂断=" + phoneNumber);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
console.log("[Broadcast]通话中=" + phoneNumber);
break;
}
console.log(intent.getAction());
}
});
3、首次进入,获取不到服务,导致订阅失败。
解决:安卓机要延时1000毫秒订阅
setTimeout(function() {
// 获取蓝牙设备的所有服务
plus.bluetooth.getBLEDeviceServices({
deviceId:deviceId,
success:function(e){
var services = e.services;
console.log('get services success: '+services.length);
for(var i in services){
console.log(i+': '+JSON.stringify(services[i]));
}
},
fail:function(e){
console.log('get services failed: '+JSON.stringify(e));
}
});
// 启用notify功能
plus.bluetooth.notifyBLECharacteristicValueChange({
deviceId: deviceId,
serviceId: serviceId,
state:true,
characteristicId: characteristic.notify,
success: function(e) {
},
fail: function(e) {
console.log('notify characteristics failed');
}
});
}, 1000);
4、安卓手机,app连接蓝牙设备成功之后,接收不到订阅的值,在连接的状态下再次进入页面就能接收到订阅值
解决:连接成功之后要延迟1秒设置最大传输单元
plus.bluetooth.createBLEConnection({
deviceId: deviceId,
timeout: 4000,
success: function (e) {
var u = navigator.userAgent, app = navigator.appVersion;
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; // Android
if(isAndroid){
setTimeout(function(){
plus.bluetooth.setBLEMTU({
deviceId:deviceId,
mtu:255,
success:function(e){
0 && console.log('set MTU success: '+JSON.stringify(e));
},
fail:function(e){
console.log('set MTU failed: '+JSON.stringify(e));
}
});
},1000)
}
},
fail: function (e) {
}
});