2017-01-12 19 views
5

Jestem kompletnym nowicjuszem w świecie Androida. Proszę, wybacz mi, jeśli moje pytanie jest zbyt naiwne.Czy parowanie Bluetooth OOB jest naprawdę obsługiwane w systemie Android?

Pracuję nad przykładową aplikacją, aby przeprowadzić parowanie Bluetooth między Linux-Boxem (FC-21 z systemem Bluez-5.42) a tabletem z systemem Android. Używam NFC do przesyłania nazwy Bluetooth, adresu i danych OOB z komputera na system Android. Jestem w stanie przesłać powyższe dane z komputera do systemu Android przez NFC (wiązka być dokładna) i jestem w stanie analizować i dekodować wszystkie dane po stronie Androida. Dzięki adresowi Bluetooth w Linuksie dostępnym na Androidzie, mogę zadzwonić do CreateBond(), aby powiązać tablet z Androidem z Linux Box. Przetestowałem tę część i działa zgodnie z oczekiwaniami.

Problem z tą metodą polega na tym, że podczas parowania Bluetooth używane jest porównanie numeryczne lub model skojarzenia wpisu klucza, co, jak uważam, jest aberracją dla doświadczenia użytkownika, gdy używa NFC do parowania. Ponieważ mam już dane OOB komputera, chciałbym użyć powiązania OOB do sparowania tak, aby nie pogorszyć komfortu użytkownika.

Aby to zrobić, po zastąpieniu CreateBond() przez CreateBondOutOfBand() [przy użyciu odbicia], żądanie parowania nie jest wysyłane z systemu Android na komputer z systemem Linux.

 try { 
     showLog("Pairing started"); 
     Method m = bDev.getClass().getMethod("createBondOutOfBand", byte[].class, byte[].class); 
     showLog("Found method"); 
     Boolean flag = (Boolean) m.invoke(bDev, Hash, Rand,(Object[]) null); 
     //Method m = bDev.getClass().getMethod("createBond", (Class[]) null); 
     //Boolean flag = (Boolean) m.invoke(bDev, (Object[]) null); 
     if(flag) 
      showLog("Pairing successfully finished."); 
     else 
      showLog("Pairing failed"); 
    } catch (Exception e) { 
     showLog("Pairing failed."); 
    } 

Szukałem w Internecie, ale nie mogłem znaleźć żadnych konkretnych dowodów na to, że parowanie OOB można zaimplementować w systemie Android.

Ponadto, aby sprawdzić zachowanie natywnego systemu Android, utworzyłem tag NFC z nazwą Bluetooth, adresem i danymi OOB w systemie Linux. Kiedy trzymałem tag na tablecie z Androidem, parowanie Bluettoth zostało uruchomione, ale nadal nie korzystał z modelu skojarzenia OOB.

Moje pytania są następujące

  • Czy modelu stowarzyszenie OOB naprawdę obsługiwane na Androidzie?
  • Jeśli model skojarzeń OOB jest obsługiwany, czy można użyć funkcji CreateBondOutOfBand() do korzystania z interfejsu API , czy też istnieje inny interfejs API, którego należy użyć?

Wszelkie dane wejściowe będą bardzo mile widziane.

Dzięki,

Sai

+0

Hej, mamy do czynienia z tym samym problemem. Znalazłeś rozwiązanie? – Seynorth

+0

Witam, chciałbym również wiedzieć, czy znalazłeś odpowiedź: – ymerdrengene

+0

@Syncowa, ymerdrengene Przepraszam, nie miałem czasu na to spojrzeć. – saai63

Odpowiedz

0

nie używam NFC ale używam odbicie w użyciu createBondOutOfBand. Ponadto ten kod działa na linii Motorola 7.1 (na Moto G4 play i Moto E 2015) oraz na Samsunga oficjalnego rom 7.0 (Galaxy S6), ale nie działa na LG G5 lub G6 oficjalnego rom 7.0 (zawsze uwierzytelnianie zawiedzie).

Oto mój kod (niezupełnie różny od twojego @ saai63).

private boolean createBondOutOfBand(final byte[] oobKey) { 
    try { 
     if (DEBUG) { 
      Log.d(LOG_TAG, "createBondOutOfBand entry"); 
     } 

     Class c = Class.forName("android.bluetooth.OobData"); 
     Constructor constr = c.getConstructor(); 
     Object oobData = constr.newInstance(); 
     Method method = c.getMethod("setSecurityManagerTk", byte[].class); 
     method.invoke(oobData, oobKey); 

     Method m = mBluetoothDevice.getClass().getMethod("createBondOutOfBand", int.class, c); 
     boolean res = (boolean)m.invoke(mBluetoothDevice, BluetoothDevice.TRANSPORT_AUTO, oobData); 

     if (DEBUG) { 
      Log.d(LOG_TAG, "createBondOutOfBand result => " + res); 
     } 

     return res; 

    } 
    catch (Exception e) { 
     Log.e(LOG_TAG, "Error when calling createBondOutOfBand", e); 
     return false; 
    } 
} 
Powiązane problemy