Чи може пристрій Android виступати в ролі iBeacon?


78

Чи може пристрій Android виступати в ролі iBeacon і з’ясувати, коли в його діапазон потрапляють інші пристрої Android? Чи потрібно на цих інших пристроях Android увімкнути Bluetooth?

Якщо клієнт заходить у мій магазин, і у нього на своєму пристрої не встановлена ​​моя програма, може iBeacon працювати або він повинен встановити програму спочатку? Клієнтів відвідує наш магазин щодня, але якщо у них не встановлено мій додаток, чи працює концепція iBeacon?


Вам слід відійти від "IBeacon" і розбити його на загальний термін, провести деякі дослідження.
JoxTraex

@JoxTraex я прочитав цей підручник: devfright.com/ibeacons-tutorial-ios-7-clbeaconregion-clbeacon Але у мене є плутанина, тому задайте питання тут. Будь ласка, допоможіть мені, якщо у вас є якесь уявлення про це саме.
Hardik Joshi

Перевірити це посилання , щоб перетворити ваш Android 5.0 телефон до IBeacon пристрої developer.radiusnetworks.com/2014/11/18 / ...
Zack S

Відповіді:


75

ТАК Це можливо на Android 5+, і ви можете знайти код із відкритим кодом для передачі як маяк в бібліотеці Android Beacon . У додатку Beacon Scope у магазині Google Play є також повнофункціональна версія передавача маяка .

Ось приклад передачі iBeacon за допомогою бібліотеки Android Beacon:

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

Ви також можете передавати як маяк на кореневих пристроях Android 4.4.3 , але для цього потрібна програма, встановлена ​​із системними привілеями.

Пристрої Android 4.3 з BluetoothLE можуть бачити iBeacons, але не можуть діяти як iBeacons, оскільки Android 4.3 не підтримує периферійний режим. Пристрої Samsung Android містять окремий запатентований SDK, але він також не дозволяє пристроям діяти як iBeacons. Див .: Примусьте пристрій Samsung Android рекламувати як iBeacon ) Пристрої iOS, однак, можуть діяти як iBeacons.

Зазвичай технології iBeacon не призначені для того, щоб телефони бачили інші телефони. Але ви можете зробити те, що запропонуєте на iOS, створивши спеціальну програму, яка змушує телефони виступати в ролі iBeacon та шукати інші iBeacons навколо них. Це дозволило б кожному, хто має програму, бачити поруч інших, хто користується такою ж програмою. Для всіх телефонів потрібно було б увімкнути Bluetooth.

Так, щоб відповісти на ваше друге запитання, так, на мобільному пристрої, як Android, так і iOS, повинен бути встановлений додаток, щоб користуватися перевагами iBeacons. Наразі жодна операційна система нічого не робить, коли бачить iBeacon, якщо не встановлена ​​програма, яка спеціально запрограмована на щось. Отже, клієнти, які приходять у магазин, повинні мати вже встановлений додаток, або вони не можуть взаємодіяти з iBeacons.


1
Також це! Див. "Периферійний режим BLE" -> android-developers.blogspot.com/2014/06/…
Алексіс

1
You can also transmit as a beacon on rooted Android 4.4.3 devices, but it requires an app installed with system privileges. Як я можу це зробити?
Раїв,

2
Якщо ви розмістите нове запитання, я відповім - недостатньо місця для пояснення в коментарях.
davidgyoung

Приємна та інформативна відповідь. Але я маю сумніви щодо цього речення: "Робити це на Android зараз можна лише на пристроях Samsung". Трохи вище ви говорите, що Samsung SDK не дозволяє пристроям діяти як iBeacons (і посилання на запитання, яке має таку ж відповідь). Якщо це так ... як пристрої Samsung можуть поводитися як iBeacons, якщо Android SDK цього не дозволяє, а Samsung SDK також не здатний використовувати таку функцію?
petersaints

1
Це важливе уточнення, так. Для передачі даних на Android 5.x + потрібна не тільки підтримка чіпсету, але й підтримка в ПЗУ. Наприклад, пристрої Nexus 5 мають підтримку чіпсетів, але Google вимкнув підтримку в офіційному ПЗУ. Я склав тут список пристроїв, які, як відомо, підтримують та не підтримують передачу: altbeacon.github.io/android-beacon-library/…
davidgyoung

17

Так , пристрої Android можуть виконувати функції iBeacon. Я досягаю цього за допомогою андроїд 5.X та бібліотеки AltBeacon . Бібліотека AltBeacon від Radius Networks також пропонує класи для створення Android як випромінювача маяка та рецептора. Ось фрагмент коду, який буде працювати для android як iBeacon:

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

Сподіваюся, це буде корисно для користувачів, які шукають андроїд як iBeacon. jj


Дякую, що поділились. :)
Hardik Joshi

Чи потрібен для цього вкорінений пристрій?
Амітабх

Ні, немає потреби викорінювати пристрій :))
Йогеш

Як це зробити в реакції-native?
user43286

як це реалізувати в кордові?
Atul Verma

7

Чистий Android SDK. Нульовий сторонній код - добре для перевірки відкритого коду

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

Помістіть свого UUID Minor Meyer в ті місця з корисним навантаженням, але залиште перші два байти як є.


Дякую за вашу відповідь, я змусив це працювати, однак лише після додавання додаткового байту до корисного навантаження потужністю tx.
Хосе Переда
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.