该应用程序的目标是22,最低版本为18,并在Lollipop上按预期工作。启动Marshmallow应用程序需要要求“精细”。并且'粗糙' BLE的权限。我已经添加了它们但是没有触发回调。
AndroidManifest:
...
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
<!-- ble -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- for Android M BLE requires the following permissions too -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
使用UUID过滤完成发现:
this.adapter.startLeScan(new UUID[]{this.serviceUUID}, this.discoveryListener);
回调:
@Override
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
Log.d(TAG, "Bluetooth device found: " + device);
foundBluetoothDevices.add(device);
}
我可以看到找到了设备,但没有触发回调:
12-03 12:34:19.266 9003-9003/com.company.project D/FindCamerasTask﹕ Discovery started
12-03 12:34:19.266 9003-9003/com.company.project D/BluetoothAdapter﹕ startLeScan(): [Ljava.util.UUID;@dd832eb
12-03 12:34:19.268 9003-9003/com.company.project D/BluetoothAdapter﹕ STATE_ON
12-03 12:34:19.270 4362-4375/? D/BtGatt.GattService﹕ registerClient() - UUID=92d098d2-0da1-4908-8194-14c504680fae
12-03 12:34:19.271 4362-4382/? D/BtGatt.GattService﹕ onClientRegistered() - UUID=92d098d2-0da1-4908-8194-14c504680fae, clientIf=5
12-03 12:34:19.271 9003-9064/com.company.project D/BluetoothLeScanner﹕ onClientRegistered() - status=0 clientIf=5
12-03 12:34:19.271 4362-4401/? D/BtGatt.GattService﹕ start scan with filters
12-03 12:34:19.273 4362-4385/? D/BtGatt.ScanManager﹕ handling starting scan
12-03 12:34:19.288 4362-4382/? D/BtGatt.GattService﹕ onScanFilterEnableDisabled() - clientIf=5, status=0, action=1
12-03 12:34:19.288 4362-4382/? D/BtGatt.ScanManager﹕ callback done for clientIf - 5 status - 0
12-03 12:34:19.288 4362-4385/? D/BtGatt.ScanManager﹕ addFilterToController: 2
12-03 12:34:19.302 4362-4382/? D/BtGatt.GattService﹕ onScanFilterConfig() - clientIf=5, action = 0 status = 0, filterType=2, availableSpace=47
12-03 12:34:19.302 4362-4382/? D/BtGatt.ScanManager﹕ callback done for clientIf - 5 status - 0
12-03 12:34:19.302 4362-4385/? D/BtGatt.ScanManager﹕ configureFilterParamter 500 10000 1 0
12-03 12:34:19.316 4362-4382/? D/BtGatt.GattService﹕ onScanFilterParamsConfigured() - clientIf=5, status=0, action=0, availableSpace=15
12-03 12:34:19.316 4362-4382/? D/BtGatt.ScanManager﹕ callback done for clientIf - 5 status - 0
12-03 12:34:19.316 4362-4385/? D/BtGatt.ScanManager﹕ configureRegularScanParams() - queue=1
12-03 12:34:19.317 4362-4385/? D/BtGatt.ScanManager﹕ configureRegularScanParams() - ScanSetting Scan mode=2 mLastConfiguredScanSetting=-2147483648
12-03 12:34:19.317 4362-4385/? D/BtGatt.ScanManager﹕ configureRegularScanParams - scanInterval = 8000configureRegularScanParams - scanWindow = 8000
12-03 12:34:19.318 4362-4382/? D/BtGatt.GattService﹕ onScanParamSetupCompleted : 0
12-03 12:34:19.466 4362-4382/? D/bt_btif_gattc﹕ btif_gattc_update_properties BLE device name=Device-00W15380138 len=17 dev_type=2
12-03 12:34:19.701 4362-4382/? D/bt_btif_gattc﹕ btif_gattc_update_properties BLE device name=Device-20154300041 len=17 dev_type=2
12-03 12:34:21.021 4362-4382/? D/bt_btif_gattc﹕ btif_gattc_update_properties BLE device name=Device-20154300015 len=17 dev_type=2
12-03 12:34:39.278 9003-9003/com.company.project W/BleRpcConnectionFactory﹕ Discovery timeout fired (20000)
12-03 12:34:39.279 9003-9003/com.company.project D/BluetoothAdapter﹕ stopLeScan()
12-03 12:34:39.324 4362-4382/? D/BtGatt.GattService﹕ onScanFilterParamsConfigured() - clientIf=5, status=0, action=1, availableSpace=16
12-03 12:34:39.324 4362-4382/? D/BtGatt.ScanManager﹕ callback done for clientIf - 5 status - 0
12-03 12:34:39.324 4362-4385/? D/BtGatt.ScanManager﹕ configureRegularScanParams() - queue=0
12-03 12:34:39.324 4362-4385/? D/BtGatt.ScanManager﹕ configureRegularScanParams() - ScanSetting Scan mode=-2147483648 mLastConfiguredScanSetting=2
12-03 12:34:39.324 4362-4385/? D/BtGatt.ScanManager﹕ configureRegularScanParams() - queue emtpy, scan stopped
我已经检查过“位置”&#39; Android中授予的权限&gt;设置&gt;应用&gt;权限。在Nexus 9上进行测试。 有什么想法吗?
PS。我已经尝试过API 21 adapter.getBluetoothLeScanner().startScan(filters, scanSettings, internalScanCallbackAPI21);
并且仍然没有运气 - 类似日志但没有触发回调。
PPS。如果设置报告延迟,我就可以了:
ScanSettings scanSettings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.setReportDelay(discoveryDelay) // 0 for immediate callback (not working for me), > 0 for batch mode
.build();
如果为即时回调设置0
仍未触发侦听器。
答案 0 :(得分:1)
我不得不设置报告延迟= 1,因为0(立即回调)没有触发回调:
{{1}}
随意提出更好的解决方案,而不是这个“肮脏的小黑客”。