【问题标题】:Evothings ble write causing FCEvothings ble write 导致 FC
【发布时间】:2017-03-16 02:16:42
【问题描述】:

一切都在这里:https://github.com/evothings/cordova-ble/issues/134

我正在尝试将时间通过蓝牙发送到我的 rpi。 但我无法让evothings.ble.writeCharacteristic 工作,原因不明:/

我是这样使用 writeCharacteristic 的:

app.js

ui.append('Time is being updated ...');
device.writeCharacteristic(
    app.SYSTEMINFORMATIONSERVICE,
    characteristic_uuid,
    new Uint8Array([1]),
    function(){
        ui.append('DONE', true);
    },
        function(error){
        ui.append('ERROR', true);
        ui.text('Warning : '+error);
    }
);

显示“时间正在更新...”后应用崩溃

日志猫:

02-05 11:03:54.416 20011 20011 D BluetoothGatt: readCharacteristic() - uuid: ffffffff-ffff-ffff-ffff-fffffffffff1
02-05 11:03:54.577  1049  1049 E WifiTrafficPoller: TRAFFIC_STATS_POLL true Token 65 num clients 9
02-05 11:03:54.578  1049  1049 E WifiTrafficPoller:  packet count Tx=94854 Rx=127944
02-05 11:03:54.670  2185  2206 I bt_btif_gatt: set_read_value unformat.len = 42 
02-05 11:03:54.671 20011 20878 D BluetoothGatt: onCharacteristicRead() - Device=B8:27:EB:6C:4F:9C UUID=ffffffff-ffff-ffff-ffff-fffffffffff1 Status=0 srvcType=0 srvcInstId=0 charInstId=0
02-05 11:03:54.694 20011 20011 E AndroidRuntime: FATAL EXCEPTION: main
02-05 11:03:54.694 20011 20011 E AndroidRuntime: Process: com.evothings.evothingsviewer, PID: 20011
02-05 11:03:54.694 20011 20011 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.bluetooth.BluetoothGattCharacteristic.setWriteType(int)' on a null object reference
02-05 11:03:54.694 20011 20011 E AndroidRuntime:    at com.evothings.BLE$12.run(BLE.java:988)
02-05 11:03:54.694 20011 20011 E AndroidRuntime:    at android.os.Handler.handleCallback(Handler.java:815)
02-05 11:03:54.694 20011 20011 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:104)
02-05 11:03:54.694 20011 20011 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:207)
02-05 11:03:54.694 20011 20011 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:5728)
02-05 11:03:54.694 20011 20011 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
02-05 11:03:54.694 20011 20011 E AndroidRuntime:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
02-05 11:03:54.694 20011 20011 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

在服务器端,一切都很好,只是没有调用 OnWriteRequest。所以android应用在发送信息之前就崩溃了。

【问题讨论】:

  • 你的问题有点不清楚,理解起来有点复杂。尝试编辑它以更清楚地询问您想了解的内容。
  • 你说得对,只是编辑了。它现在只显示当前问题。

标签: javascript android cordova bluetooth bluetooth-lowenergy


【解决方案1】:

在您的 logcat 中,uuid 对我来说看起来很奇怪。
我不知道您正在使用哪种设备进行测试,但 uuid 不满足其基本格式。
请参考 Service Discovery in Bluetooth website.

如果您确定 uuid 及其获取方式,请检查特征 uuid。
这并不意味着简单地检查字符串,而是检查如何检索characteristic_uuid。
检索它的最佳方法是调用 getService,然后调用 getCharacteristic。

例如,

var service = evothings.ble.getService(deviceObject, '12345678-0000-1000-8000-00805f9b34fb');
var characteristic_uuid = evothings.ble.getCharacteristic(service, '11111111-0000-1000-8000-00805f9b34fb');

evothings.ble.writeCharacteristic(deviceObject, characteristic_uuid, new Uint8Array([1]), success, error);

如果这些都正常,那么请检查设备是否可以接收Uint8Array类型。

【讨论】:

  • 我会调查一下,谢谢 :) - 我们正在尝试和朋友一起构建一个小小的乒乓球示例。而且我们每次都会遇到同样的错误,不同的手机,不同的 RPi,同样的崩溃...... Uuid 可能是解决方案。我会回来的;)
猜你喜欢
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
相关资源
最近更新 更多