我在调用onLeScan时遇到问题。我在开始扫描中放置了一个标签,每次都会调用它。出于某种原因,我的onLeScan永远不会被调用。有没有人看到我所做的事情的问题?应该在startLeScan之后立即调用onLeScan,对吗?
private void startScan() {
Log.i(TAG, "Starting Scan");
mBluetoothAdapter.startLeScan(this);
setProgressBarIndeterminateVisibility(true);
mHandler.postDelayed(mStopRunnable, 5000);
}
@Override
public void onLeScan(final BluetoothDevice device, final int rssi, byte[] scanRecord) {
Log.i(TAG, "IN OnLeScan");
Log.i(TAG, "New LE Device: " + device.getName() + " @ " + rssi);
runOnUiThread(new Runnable() {
@Override
public void run(){
DeviceBeacon beacon = new DeviceBeacon(device.getName(), device.getAddress(), rssi);
mHandler.sendMessage(Message.obtain(null, 0, beacon));
}
});
}
编辑更改了我的onLeScan功能。仍然没有工作,但我认为我正走向正确的道路。 DeviceBeacon是一个只包含方法的类:getName(),getSignal()和getAddress()
编辑2 我不确定我的错误在哪里。我有2个nexus 7,我有蓝牙和bluetooth_admin权限设置以及额外的行,以确保我只搜索bluetoothLE设备。 startLeScan返回true。它只是找不到该地区的任何设备。这可能是什么原因?我甚至将两个设备的可见性设置为true。
编辑3 Git repo如果你想查看一些代码。 https://github.com/cshunger/AndroidBluetoothTouch
编辑4 我的日志猫:
01-12 01:18:59.728: I/BluetoothTouch(14510): Starting Scan
01-12 01:18:59.728: D/BluetoothAdapter(14510): startLeScan(): null
01-12 01:18:59.738: D/BluetoothAdapter(14510): onClientRegistered() - status=0 clientIf=5
01-12 01:19:04.763: I/BluetoothTouch(14510): Stoping Scan
01-12 01:19:04.763: D/BluetoothAdapter(14510): stopLeScan()
答案 0 :(得分:2)
让你的两个设备都能被蓝牙发现。
答案 1 :(得分:1)
您需要在AndroidManifest.xml中拥有BOTH权限才能扫描设备:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>