- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试连接到外围设备。当我在 Scancallback 中找到所需的设备时,我会向我的处理程序发送一条包含该设备的消息。
11-16 10:31:12.471 25907-25907/I/BleManager: START SCAN
11-16 10:31:12.471 25907-25907/ D/BluetoothAdapter: startLeScan(): null
11-16 10:31:12.481 25907-25918/ D/BluetoothAdapter: onClientRegistered() - status=0 clientIf=5
11-16 10:31:12.731 25907-25918/ W/BleOlderScanCallback: Try to connect device
11-16 10:31:12.731 25907-25907/ I/BleManager: STOP SCAN
11-16 10:31:12.731 25907-25907/ D/BluetoothAdapter: stopLeScan()
11-16 10:31:12.741 25907-25907/ I/BleManager: connect device
11-16 10:31:12.741 25907-25907/ I/Runnable: connectGatt
11-16 10:31:12.741 25907-25907/ D/BluetoothGatt: connect() - device: [hidden], auto: false
11-16 10:31:12.741 25907-25907/ D/BluetoothGatt: registerApp()
11-16 10:31:12.741 25907-25907/ D/BluetoothGatt: registerApp() - UUID=[hidden]
11-16 10:31:12.751 25907-25919/ D/BluetoothGatt: onClientRegistered() - status=0 clientIf=5
11-16 10:31:15.441 25907-25918/ D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=5 device=[hidden]
11-16 10:31:15.441 25907-25918/ W/BluetoothGatt: Unhandled exception in callback java.lang.NullPointerException
at android.bluetooth.BluetoothGatt$1.onClientConnectionState(BluetoothGatt.java:168)
at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:71)
at android.os.Binder.execTransact(Binder.java:404)
at dalvik.system.NativeStart.run(Native Method)
这是我的代码:
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public class BleOlderScanCallback implements BluetoothAdapter.LeScanCallback {
private static final String TAG = BleOlderScanCallback.class.getSimpleName();
private static final int START_BYTE_I = 2;
private static final int MAC_BYTE_I = 7;
private static final int MAC_SIZE = 6;
private Handler handler;
private String mac;
public BleOlderScanCallback(Handler handler, String mac) {
this.handler = handler;
this.mac = mac;
}
protected void onResult(BluetoothDevice device, byte[] scanRecord){
byte[] macBytes;
String mac;
if (device != null && scanRecord != null) {
macBytes = new byte[MAC_SIZE];
System.arraycopy(scanRecord, MAC_BYTE_I, macBytes, 0, MAC_SIZE); // copy MAC_SIZE positions (since index MAC_BYTE_I) of array scanRecord to array mac
mac = formatMAC(macBytes);
Logg.i(TAG, mac + " device: " + device.getName());
if (this.mac.equals(mac)) {
Logg.w(TAG, "Try to connect device");
handler.obtainMessage(BleHandler.SCANNED_DEVICE, device).sendToTarget();
}
else{
Logg.i(TAG, "Other mac ");
}
}
}
/**
* API lower Lollipop (21)
* @param device
* @param rssi
* @param scanRecord
*/
@Override
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
onResult(device, scanRecord);
}
}
这是我的处理程序。它调用我的管理器类来连接BluetoothGatt
public class BleHandler extends Handler {
private static final String TAG = BleHandler.class.getSimpleName();
public static final int SCANNED_DEVICE = 1;
private BleManager bleManager; // should I use WeakReference?
public BleHandler (BleManager bleManager){
this.bleManager = bleManager;
}
@Override
public void handleMessage(Message message){
BluetoothDevice device;
switch (message.what){
case SCANNED_DEVICE:
bleManager.stopBtScan();
device = (BluetoothDevice) message.obj;
bleManager.connect(device);
break;
}
}
}
在我的管理器类中,连接方法如下所示:
public void connect(final BluetoothDevice device){
Logg.i(TAG, "connect device");
if (device == null){
Logg.i(TAG, "device to connect is null");
return;
}
Handler handler = new Handler(context.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
Logg.i("Runnable", "connectGatt");
bluetoothGatt = device.connectGatt(context, false, bluetoothGattCallback);
}
});
}
我重写了BluetoothGatt.onConnectionStateChange,但执行没有到达这里
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public class BleGattCallback extends BluetoothGattCallback {
private static final String TAG = BleGattCallback.class.getSimpleName();
private int connectionState = STATE_DISCONNECTED;
protected static final int STATE_DISCONNECTED = 0;
protected static final int STATE_CONNECTING = 1;
protected static final int STATE_CONNECTED = 2;
// public static final String ACTION_GATT_CONNECTED = "com.example.bluetooth.le.ACTION_GATT_CONNECTED";
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status,
int newState) {
Logg.i(TAG, "onConnectionStateChange");
try {
super.onConnectionStateChange(gatt, status, newState);
if (newState == BluetoothProfile.STATE_CONNECTED) {
connectionState = STATE_CONNECTED;
Logg.w(TAG, "Connected to GATT server");
Logg.i(TAG, "Attempting to start service discovery:" + gatt.discoverServices());
} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
connectionState = STATE_DISCONNECTED;
Logg.w(TAG, "Disconnected from GATT server.");
try {
gatt.close();
} catch (Exception e) {
Logg.d(TAG, "close ignoring: " + e);
}
}
}catch(NullPointerException e){
Logg.i(TAG, "NullPointerException onConnectionStateChange");
}
}
}
我在尝试断开连接时在 stackoverflow 中看到了类似的错误,解决方案是在 gatt.disconnect 之后不立即调用 gatt.close(),但这是一个不同的问题,我无法解决它。我是使用蓝牙 LE 进行编程的新手,并且陷入了这一部分。
最佳答案
我刚刚发现了问题。这是一件愚蠢的事情,我用空的 bluetoothGattCallback 调用 device.connect 。写下这个问题确实对我很有帮助,我在这个问题上度过了一个洞。
关于java - 尝试连接 BluetoothGatt 时回调中出现未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40632855/
我正在研究 learnyounode 的 HTTP 客户端作业。 我想知道为什么控制台记录来自response.on(“end”,callback)的数据仅输出预期输出的最后一部分,而控制台记录来自r
我正在尝试创建一个对象列表(在我的示例中为 List),我在其中使用 json 将对象添加到此列表,但该列表仍为空。这是我的代码: public List readCardsFromJson() {
我有一个 JavaScript 函数“print_something”,它在大约 300 个 jsp 帮助页面中实现。我发现这个“print_something”函数必须被纠正。所以我正在寻找一个不更
有 2 个 HTML 下拉列表,一个用于 12 小时时间,一个用于每小时 5 分钟的时间间隔。 .. 1 .. 12 .. 0 .. 55 .. 一直在尝试使用 if/
我有一个 A 类,我打算在它与设备驱动程序交互时将其放入共享库中。 我有一个 B 类,将来可能是 C、D、E...,它将使用共享库中的 A 类。 我想要在类 A 中设置回调函数的功能,以便当特定事件发
我需要能够在处理完 Observable.next() 之后执行回调。 我有一个组件“A”,它有一个主题使用 Subject.next() 发送通知。我有一个组件“B”,它订阅了 Subject.as
我有一张在顶部和底部单元格下方带有阴影的表格(此处使用 Matt Gallagher 的解决方案:http://cocoawithlove.com/2009/08/adding-shadow-effe
有人可以向我解释一下为什么这段代码有效 renderSquare(i) { return ( this.handleClick(i)} /> ); } 但
我可以让两个不同的客户端监听相同的 WCF 回调并让它们都接收相同的数据而不必进行两次处理吗? 最佳答案 不是真的 - 至少不是直接的。你所描述的听起来很像发布/订阅模式。 WCF 服务基本上在任何给
我是 SignalR 的新手,如果这个问题太明显,我深表歉意,但我在文档中找不到任何答案。 这是我的代码。 /*1*/ actions.client.doActionA = function (r
我有这个应用程序,您可以在其中输入一些文本并按下一个按钮,将此文本添加到自定义小部件中。这是代码: import 'dart:core'; import 'package:flutter/materi
我读到当您还想使用模型回调时不能使用 Keras 进行交叉验证,但是 this post表明这毕竟是可能的。但是,我很难将其纳入我的上下文。 为了更详细地探讨这个问题,我正在关注 machinelea
我尝试在重力表单中提交表单失败后运行一些 jQuery 代码,也就是验证发现错误时。 我尝试使用 Ajax:complete 回调,但它根本不触发。 我尝试运行的代码基本上将监听器添加到选择下拉列表中
我有一个 $image,我 .fadeIn 和 .fadeOut,然后 .remove .fadeOut 完成。这是我的代码: $image .fadeIn() .fadeOut(func
我正在处理一个自定义文件路径类,它应该始终执行一个函数 写入相应的系统文件及其文件对象后 关闭。该函数将文件路径的内容上传到远程位置。 我希望上传功能完全在用户的幕后发生 透视,即用户可以像使用其他任
这里是 javascript 新手,所以回调在我的大脑中仍然有点不确定。 我想做的是:给定一个“菜单”,它是一个 objectId 数组,查询与该 objectId 相对应的每个 foodItem,获
我正在学习回调,我编写了以下代码: var http = require('http'); var str = ""; var count = 2; function jugglingAsync(ca
这是我的困境,我有一系列被调用的函数,我正在使用回调函数在它们完成时执行函数。回调返回一个值并且效果也很好,我的问题是当我向回调添加参数时我无法再访问返回值。这是一个有效的例子: function m
This question already has answers here: Explanation of function pointers (4个答案) 上个月关闭。 如何将函数指针作为参数传递
我无法让以下代码工作。假设 ajax 调用有效,并且 msg['username'] 预设为 'john'。我想我对如何将变量传递给回调感到困惑。编辑:我认为我的主要困惑是如何从 Ajax 中获取“m
我是一名优秀的程序员,十分优秀!