Kann ein Android-Gerät als iBeacon fungieren?

78

Kann ein Android-Gerät als iBeacon fungieren und herausfinden, wann andere Android-Geräte in seine Reichweite kommen? Müssen auf diesen anderen Android-Geräten Bluetooth aktiviert sein?

Wenn ein Kunde in meinen Shop kommt und meine App nicht auf seinem Gerät installiert hat, kann iBeacon funktionieren oder muss er die App zuerst installieren? Es gibt so viele Kunden, die täglich unseren Shop besuchen. Aber wenn meine App nicht installiert ist, funktioniert das iBeacon-Konzept?

Hardik Joshi
quelle
Sie sollten sich von "IBeacon" lösen und es in einen allgemeinen Begriff aufteilen, etwas recherchieren.
JoxTraex
@JoxTraex Ich hatte dieses Tutorial gelesen: devfright.com/ibeacons-tutorial-ios-7-clbeaconregion-clbeacon Aber ich habe Verwirrung, also stell hier eine Frage. Bitte helfen Sie mir, wenn Sie eine Idee dazu haben.
Hardik Joshi
Überprüfen Sie diesen Link, um Ihr Android 5.0-Telefon in ein iBeacon-Gerät zu verwandeln. Developer.radiusnetworks.com/2014/11/18/…
Zack S

Antworten:

75

JA Dies ist unter Android 5+ möglich. In der Android Beacon Library finden Sie Open-Source-Code für die Übertragung als Beacon . In der Beacon Scope- App im Google Play Store gibt es auch eine Vollversion eines Beacon-Senders .

Hier ist ein Beispiel für die Übertragung von iBeacon mit der Android Beacon Library:

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);

Sie können auch als Beacon auf gerooteten Android 4.4.3-Geräten übertragen , es ist jedoch eine App mit Systemberechtigungen erforderlich.

Android 4.3-Geräte mit BluetoothLE können iBeacons sehen, fungieren jedoch nicht als iBeacons, da Android 4.3 den Peripheriemodus nicht unterstützt. Samsung Android-Geräte enthalten ein separates proprietäres SDK, aber es erlaubt Geräten auch nicht, als iBeacons zu fungieren. Siehe: Samsung Android-Gerät als iBeacon bewerben lassen ) iOS-Geräte können jedoch als iBeacons fungieren.

Normalerweise sind iBeacon-Technologien nicht dafür gedacht, dass Telefone andere Telefone sehen. Sie können jedoch das tun, was Sie unter iOS vorschlagen, indem Sie eine benutzerdefinierte App erstellen, mit der Telefone als iBeacon fungieren und nach anderen iBeacons in ihrer Umgebung suchen. Dies würde es jedem mit der App ermöglichen, andere mit derselben App in der Nähe zu sehen. Für alle Telefone muss Bluetooth aktiviert sein.

Um Ihre zweite Frage zu beantworten: Ja, auf einem mobilen Gerät, sowohl Android als auch iOS, muss eine App installiert sein, um die Vorteile von iBeacons nutzen zu können. Keines der Betriebssysteme tut derzeit etwas, wenn es einen iBeacon sieht, es sei denn, eine App ist installiert, die speziell dafür programmiert ist. Kunden, die in einem Geschäft ankommen, müssen bereits eine App installiert haben, sonst können sie nicht mit iBeacons interagieren.

Davidgyoung
quelle
1
Auch das! Siehe "BLE Peripheral Mode" -> android-developers.blogspot.com/2014/06/…
Alexis
1
You can also transmit as a beacon on rooted Android 4.4.3 devices, but it requires an app installed with system privileges. Wie kann ich das machen?
Raiv
2
Wenn Sie eine neue Frage stellen, werde ich antworten - nicht genug Platz, um sie in Kommentaren zu erklären.
Davidgyoung
Schöne und informative Antwort. Ich habe jedoch Zweifel an diesem Satz: "Dies unter Android zu tun, ist derzeit nur mit Samsung-Geräten möglich." Nur ein bisschen weiter oben sagen Sie, dass das Samsung SDK es Geräten nicht erlaubt, sich wie iBeacons zu verhalten (und auf eine Frage zu verlinken, die dieselbe Antwort hat). Wenn dem so ist ... wie können sich Samsung-Geräte wie iBeacons verhalten, wenn das Android SDK dies nicht zulässt und das Samsung SDK diese Funktion ebenfalls nicht bietet?
Petersaints
1
Das ist eine wichtige Klarstellung, ja. Die Übertragung unter Android 5.x + erfordert nicht nur Chipsatzunterstützung, sondern auch Unterstützung im ROM. Nexus 5-Geräte unterstützen beispielsweise Chipsätze, Google deaktiviert jedoch die Unterstützung im offiziellen ROM. Ich habe eine Liste von Geräten zusammengestellt, von denen bekannt ist, dass sie die Übertragung hier unterstützen und nicht unterstützen: altbeacon.github.io/android-beacon-library/…
davidgyoung
17

Ja , Android-Geräte können als iBeacon fungieren. Ich erreiche dies mit Android 5.X und AltBeacon Bibliothek . Die AltBeacon-Bibliothek von Radius Networks bietet Klassen zum Erstellen von Android als Beacon-Emitter und -Rezeptor. Hier ist ein Teil des Codes, der für Android als iBeacon funktioniert:

 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.");
            }
        });

Hoffe, es wird hilfreich für Benutzer, die nach Android als iBeacon suchen. jj

Yogesh
quelle
Danke für das Teilen. :)
Hardik Joshi
Benötigt dies ein gerootetes Gerät?
Amitabh
Nein, es ist nicht nötig, das Gerät zu
rooten
Wie geht das in React-Native?
user43286
Wie implementiert man dies in Cordova?
Atul Verma
6

Reines Android SDK. Kein Code von Drittanbietern - gut für Open Source Due Diligence

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);

Platzieren Sie Ihren UUID Minor Mayor an diesen Stellen in der Nutzlast, aber lassen Sie die ersten zwei Bytes unverändert.

Zbigniew Mazur
quelle
Vielen Dank für Ihre Antwort, ich habe es zum Laufen gebracht, allerdings erst, nachdem ich der Nutzlast ein zusätzliches Byte mit der Sendeleistung hinzugefügt habe.
José Pereda