gpt4 book ai didi

android-5.0-lollipop - BluetoothLeScanner 找不到回调包装器

转载 作者:行者123 更新时间:2023-12-04 16:51:10 27 4
gpt4 key购买 nike

由于我在 Android Lollipop 上遇到蓝牙问题,我尝试更改扫描仪方法。
所以我尝试使用新包。
在以前的版本中,我调用了 startScan(mLeScanCallback) 并且一切正常,但是现在,当我调用 startScan(mScanCallback) 时出现错误:“D/BluetoothLeScanner:找不到回调包装器”。
没有找到设备,我用来显示设备的 ListAdapter 是空的。

注释行是之前的代码(它有效!)。
这是我的代码:

public class Selection extends ListActivity implements ServiceConnection {

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

mHandler = new Handler();

// Initializes a Bluetooth adapter through BluetoothManager.
final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter();



getApplicationContext().bindService(new Intent(this, MetaWearBleService.class), this, Context.BIND_AUTO_CREATE);

}

private void scanLeDevice(final boolean enable) {
final BluetoothLeScanner bluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner();

if (enable) {

mHandler.postDelayed(new Runnable() {
@Override
public void run() {

//mBluetoothAdapter.stopLeScan(mLeScanCallback);
bluetoothLeScanner.stopScan(mScanCallback);
setListAdapter(listAdapter);

}
}, SCAN_PERIOD);


//mBluetoothAdapter.startLeScan(mLeScanCallback);
bluetoothLeScanner.startScan(mScanCallback);

} else {

//mBluetoothAdapter.stopLeScan(mLeScanCallback);
bluetoothLeScanner.stopScan(mScanCallback);
setListAdapter(listAdapter);

}


}

private ScanCallback mScanCallback =
new ScanCallback() {

public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
runOnUiThread(new Runnable() {
@Override
public void run() {

listAdapter.addDevice(device);

}
});
}
};

相反,ListAdapter 扩展 BaseAdapter 并使用 ViewHolder。如果需要,我会发布它。

那么“D/BluetoothLeScanner:找不到回调包装器”是什么意思?怎么了?

不然怎么解决Android Lollipop扫描的问题?
在 Lollipop 中,我经常有关于 BluetoothGatt 的错误。我不知道要缩小它(或解决它)。

谢谢

最佳答案

日志消息 D/BluetoothLeScanner: could not find callback wrapper出现 每当 Android 的蓝牙扫描 API 被告知在他们认为扫描尚未开始时停止扫描应用程序 .你可以通过查看Android的BluetoothLeScanner的源代码看到这一点。 here .

忽略这通常是安全的 因为有很多原因扫描我没有真正开始(它已经停止,蓝牙关闭,没有授予权限等)进行扫描的客户端软件通常会在计时器上停止扫描,无论它是否成功已启动,或者是否在计时器关闭之前手动停止。 Android 的示例代码(以及上面显示的代码)正是这样做的,通常会导致显示这些日志消息。

如果您真的想最小化这些消息,您需要跟踪扫描是否真正开始,并且只有在确实开始时才停止扫描。不幸的是,如果扫描成功开始,您不会收到返回码,并且只会收到到 onScanFailed(errorCode) 的异步回调。如果您无法成功启动。所以一种方法是设置 scanStartCount++;当您调用开始扫描时,并设置 scanStartCount--;当您收到回拨 onScanFailed(errorCode) 时.然后,当您的计时器关闭以停止扫描时,只有在 scanStartCount > 0 时才真正停止它。

请记住,您只能最大限度地减少来自应用程序的这些消息。手机上执行蓝牙扫描的其他应用程序也可能导致这些消息被发出。

关于android-5.0-lollipop - BluetoothLeScanner 找不到回调包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40862767/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com