没有调用leScan

时间:2014-01-11 18:24:17

标签: android bluetooth-lowenergy

我在调用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()

2 个答案:

答案 0 :(得分:2)

让你的两个设备都能被蓝牙发现。

答案 1 :(得分:1)

您需要在AndroidManifest.xml中拥有BOTH权限才能扫描设备:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>