Come connettere il dispositivo Android a un dispositivo iOS su BLE (Bluetooth Low Energy)

Sto cercando di creare un'applicazione che utilizzi la nuova API Bluetooth a basso consumo energetico di Android. Per questo, ho iniziato con il campione BLE con il livello API 18 .

Come ho letto che Android non può agire come periferica, ho messo il telefono Android in modalità centrale, scansionando i dispositivi BLE attorno a esso. A tal fine, ho fatto dei test con una piattaforma nordica che simula un sensore di cuore. Tutto funziona in modo perfetto!

  • Errore di Android Studio: 'command' C: \ Programmi \ Java \ jdk1.7.0_75 \ bin \ java.exe '' completato con valore di output non zero
  • Includi layout con gli attributi personalizzati
  • Imansible rilevare il completamento di TTS (callback) android.
  • Programmaticamente modificare Manifest - autorizzazioni personalizzate di Android
  • Il plugin di File Cordova non diventa mai pronto in Android
  • Posizione di avvio PagerAdapter
  • Dopo di ciò, cerco di scegliere un iPhone (iOS 7 beta 4) e metterlo in modo periferico e simulare un sensore di frequenza cardiaca come il test precedente. L'applicazione Android è in grado di visualizzare il dispositivo e di connettersi ad esso. Ma dopo che la connessione è triggers, i due dispositivi si scollegano l'uno dall'altro in 3-4 secondi. Oltre a questo, quando chiamo discoverServices () sul lato Android, non viene triggersta alcuna richiamata! In alcuni casi il dispositivo Android riceve l'evento "Connected" anche se il chip di iOS Bluetooth è distriggersto. Questo è molto strano. Per dimostrarlo, ho messo la scheda nordica in modalità centrale e sono stato in grado di connettersi correttamente alla periferica iOS senza problemi.

    Cosa potrebbe essere? Ci sono alcune limitazioni per Android o iOS che non consentono di connettersi da un Android ad un iOS o viceversa?

    Grazie.

    EDIT: Dopo alcuni test difficili, ho sollevato un problema sulla pagina AOSP. Può essere controllato qui

  • Come modificare il colore della barra degli strumenti di selezione del text che viene quando si copia un text?
  • ArrayAdapter di Android - aggiungi le liste delle stringhe invece di sostituire
  • Come si parlano le due applicazioni Android?
  • Posizionamento dei controlli zoom in un MapView
  • Textview: utilizzando lo stile del titolo di dialogo: @android: style / TextAppearance.DialogWindowTitle
  • Come rilevare i dati di ingresso tramite il jack audio?
  • 3 Solutions collect form web for “Come connettere il dispositivo Android a un dispositivo iOS su BLE (Bluetooth Low Energy)”

    Aggiunta di un riepilogo per riferimento:

    Cosa potrebbe essere? Ci sono alcune limitazioni per Android o iOS che non consentono di connettersi da un Android ad un iOS o viceversa?

    Quando si connette a un server GATT pubblicizzato come dispositivo dualmode (BLE e BR / EDR) chiamando connectGatt (…), il flag TRANSPORT_AUTO aggiunto internamente rende l'Android come impostazione predefinita per la modalità BR / EDR ( collegamento ).

    Sono possibili soluzioni alternative:

    1. Lato periferico: interrompere la pubblicità delle abilità BR / EDR regolando le relative bandiere ( link )
    2. Lato centrale: Impostare esplicitamente il parametro di trasporto su TRANSPORT_LE chiamando la versione nascosta di connectGatt () utilizzando la riflessione

    Esempio:

    public void connectToGatt(BluetoothDevice device) { ... Method m = device.getClass().getDeclaredMethod("connectGatt", Context.class, boolean.class, BluetoothGattCallback.class, int.class); int transport = device.getClass().getDeclaredField("TRANSPORT_LE").getInt(null); // LE = 2, BREDR = 1, AUTO = 0 BluetoothGatt mGatt = (BluetoothGatt) m.invoke(device, this, false, gattCallback, transport); ... } 

    Modifica 4/2016

    Come ha affermato Arbel Israeli nel commento, Google ha introdotto una versione overloaded di connectGatt (…) che consente di specificare il trasporto in Android M.

    Ho scritto un semplice esempio di lavoro, molto relativamente semplice, e ha incluso open-source su Github: https://github.com/GitGarage . Finora è stato testato solo con un Android Nexus 9 e un iPhone 5s, ma presumo che functionrebbe anche con un Nexus 6 e diversi tipi di iPhone. Finora è impostato esplicitamente per comunicare tra un Android e un iPhone, ma presumo che sia tweakable a fare molto di più.

    Forse un po 'ritardato, ma forse il dolore può essere alleggerito leggermente;)

    Abbiamo sperimentato molto con i collegamenti BLE cross platform (iOS <-> Android) e abbiamo appreso che ci sono ancora molte incompatibilità e problemi di connessione. A parte l'instabilità di Android, dovresti anche considerare che ancora oggi non è che molti dispositivi Android supportino la modalità BLE Peripheral.

    Pertanto, se il tuo caso d'uso è caratterizzato da funzionalità e hai solo bisogno di uno scambio di dati di base, vorrei suggerire di guardare Frameworks e Biblioteche che possono get la comunicazione tra piattaforms per te, senza che tu abbia bisogno di costruirlo da zero.

    Ad esempio: http://p2pkit.io o google nelle vicinanze

    Disclaimer: Io lavoro per Uepaa, sviluppando p2pkit.io per Android e iOS.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.