web-dev-qa-db-fra.com

Un appareil Android peut-il agir comme un iBeacon?

Un appareil Android peut-il agir comme un iBeacon et déterminer quand d’autres appareils Android entrent dans sa gamme? Bluetooth doit-il être activé sur ces autres appareils Android?

Si un client entre dans ma boutique et que mon application n'est pas installée sur son appareil, iBeacon peut-il fonctionner ou doit-il d'abord l'installer? Il y a tellement de clients qui visitent notre boutique tous les jours, mais si mon application n'est pas installée, le concept iBeacon fonctionne-t-il?

74
Hardik Joshi

UPDATE: Ceci est maintenant possible sur Android 5.0, et vous pouvez trouver code de source ouverte pour la transmission en tant que balise dans la version 2.1+ de la Bibliothèque de balises Android . Il existe également une version complète d'un émetteur de balise dans l'application Localiser du Google Play Store. Vous pouvez également transmettre en tant que balise sur appareils Android 4.4.3 enracinés , mais une application installée avec les privilèges système doit être installée. Pour les anciennes versions du système d'exploitation, lisez ci-dessous.

Voici un exemple de transmission d'iBeacon avec la bibliothèque de balises Android:

Beacon beacon = new Beacon.Builder()
        .setId1("2f234454-cf6d-4a0f-adf2-f4911ba9ffa6")
        .setId2("1")
        .setId3("2")
        .setManufacturer(0x004c)
        .setTxPower(-59)
        .build();
BeaconParser beaconParser = new BeaconParser()
        .setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24");
BeaconTransmitter beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser); 
beaconTransmitter.startAdvertising(beacon);

Les appareils Android 4.3 avec BluetoothLE peuvent voir les iBeacons mais pas agir comme iBeacons, car Android 4.3 ne prend pas en charge le mode périphérique. Les périphériques Android Samsung contiennent un SDK propriétaire distinct, qui ne permet toutefois pas aux périphériques de se comporter comme des iBeacons. Voir: Faire de la publicité pour un appareil Android Samsung un iBeacon } _) Les appareils iOS peuvent toutefois agir comme des iBeacons.

Normalement, les technologies iBeacon ne sont pas conçues pour que les téléphones voient d’autres téléphones. Mais vous pouvez faire ce que vous suggérez sur iOS en faisant une application personnalisée qui fait en sorte que les téléphones agissent comme un iBeacon et recherchent d'autres iBeacons autour d'eux. Cela permettrait à quiconque avec l'application de voir d'autres personnes avec la même application à proximité. Bluetooth doit être activé sur tous les téléphones. Faire cela sur Android ne serait actuellement possible qu'avec des appareils Samsung.

Pour répondre à votre deuxième question, oui, un appareil mobile, Android ou iOS, doit avoir une application installée pour profiter des iBeacons. Aucun des deux systèmes d'exploitation ne fait actuellement quoi que ce soit lorsqu'il voit un iBeacon, à moins d'installer une application spécialement programmée pour faire quelque chose. Donc, les clients qui arrivent dans un magasin doivent avoir une application déjà installée ou ils ne peuvent pas interagir avec iBeacons.

69
davidgyoung

Oui, les appareils Android peuvent jouer le rôle d'iBeacon. Je réalise cela en utilisant Android 5.X et Bibliothèque AltBeacon . La bibliothèque AltBeacon de Radius Networks fournit des classes permettant de construire Android comme émetteur et récepteur de balise.

 Beacon beacon = new Beacon.Builder()
        .setId1("2f234454-cf6d-4a0f-adf2-f4911ba9ffa6") // UUID for beacon
        .setId2("1") // Major for beacon
        .setId3("5") // Minor for beacon
        .setManufacturer(0x004C) // Radius Networks.0x0118  Change this for other beacon layouts//0x004C for iPhone
        .setTxPower(-56) // Power in dB
        .setDataFields(Arrays.asList(new Long[] {0l})) // Remove this for beacon layouts without d: fields
        .build();

BeaconParser beaconParser = new BeaconParser()
        .setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24");

BeaconTransmitter beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser); 
beaconTransmitter.startAdvertising(beacon, new AdvertiseCallback() {

            @Override
            public void onStartFailure(int errorCode) {
                Log.e(TAG, "Advertisement start failed with code: "+errorCode);
            }

            @Override
            public void onStartSuccess(AdvertiseSettings settingsInEffect) {
                Log.i(TAG, "Advertisement start succeeded.");
            }
        });

J'espère que cela sera utile pour les utilisateurs recherchant Android comme iBeacon. jj

15
Yogesh

SDK Android pur. Zéro code tiers - bon pour la diligence raisonnable Open Source 

byte[] payload = {(byte)0x02, (byte)0x15, // this makes it a iBeacon
            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, // uuid
            (byte)0x00, (byte)0x00,  // Major
            (byte)0x00, (byte)0x00}; // Minor


    AdvertiseData.Builder dataBuilder = new AdvertiseData.Builder();
    dataBuilder.addManufacturerData(0x004C, payload); // 0x004c is for Apple inc.
    AdvertiseSettings.Builder settingsBuilder = new AdvertiseSettings.Builder();

    settingsBuilder.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY);
    settingsBuilder.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH);
    settingsBuilder.setConnectable(false);

    mAdvertiser.startAdvertising(settingsBuilder.build(), dataBuilder.build(), this);

Mettez votre maire mineur UUID à sa charge dans ces endroits, mais laissez les deux premiers octets tels quels.

0
Zbigniew Mazur