2017-03-09 2 views
1

Ich habe ein Projekt mit beidenAndroid BluetoothDevice createBond Berechtigungsfehler

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

Darin ich einen Anruf für BT-Geräte scannen mit (vereinfacht):

final BluetoothLeScanner scanner = BluetoothAdapter.getDefaultAdapter() 
     .getBluetoothLeScanner() 
ArrayList<ScanFilter> scanFilters = ArrayList<>(); 
scanFilters.add(new ScanFilter.Builder() 
     .setServiceUuid(new ParcelUuid(MY_SERVICE_UUID)) 
     .build()); 
ScanSettings scanSettings = new ScanSettings.Builder() 
     .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) 
     .build(); 
ScanCallback scanCallback = new ScanCallback() { 
    @Override 
    void onScanFailed(int errorCode) {} 
    @Override 
    void onScanResult(int callbackType, ScanResult result) { 
     result.getDevice().createBond(); 
     scanner.stopScan(this); 
    } 
    @Override 
    public void onBatchScanResults(List<ScanResult> results) {} 
}; 
scanner.startScan(scanFilters, scanSettings, scanCallback); 

Der Kern ist, dass ich scannen für ein Gerät mit meiner Dienstleistung, und für jetzt nur Bindung an die erste, die ich sehe. Alle meine Eigenschaften und Deskriptoren verwenden Lese-/Schreibberechtigungen (ich weiß nicht, ob das wichtig ist). Was ich am Ende sehen ist die Paarung Bildschirme auf beiden Geräten aber später, als ich die connectGatt Methode verwende ich nicht mit dem folgenden Fehler:

E/bt_btif: bta_gattc_cache_load: can't open GATT cache file /data/misc/bluetooth/gatt_cache_76fe0b7bf8dd for reading, error: No such file or directory 
E/bt_att: gatt_disc_cmpl_cback() - Unable to register for service changed indication 

Wenn auf der anderen Seite habe ich die BT-Einstellungen öffnen und die Geräte verbinden von dort funktioniert alles super! connectGatt funktioniert und ich kann Daten lesen/schreiben wie ich es will.

Was mache ich falsch mit createBond()?

+0

Ich habe genau das gleiche Problem gerade jetzt. Hast du eine Lösung gefunden? –

+0

Es scheint, dass wir es getan haben, aber immer noch die letzten Details ausgespült haben. Siehe Antwort unten. – TheHebrewHammer

Antwort

2

Es scheint, dass der Aufruf BluetoothDevice.createBond()BluetoothDevice.TRANSPORT_AUTO verwendet, um die Bindung zu erstellen. Dies funktioniert nicht auf allen Android-Plattformen und ist spröde. Stattdessen wurde der Anruf mit dem spezifischen Transport durchgeführt, mit dem nach dem Gerät gesucht wurde.

device.createBond(BluetoothDevice.TRANSPORT_LE) 
+0

Haben Sie versucht, die createBond() 'Methode mehrmals zu wiederholen, um zu sehen, ob sie stattdessen durchgeht? Sie haben vielleicht einen ** 137 ** Fehler bekommen, der so umgangen werden kann. –

Verwandte Themen