[android] Android 장치가 iBeacon으로 작동 할 수 있습니까?

Android 기기가 iBeacon 역할을하고 다른 Android 기기가 해당 범위에 들어올 때를 파악할 수 있습니까? 다른 Android 기기에서 블루투스를 켜야합니까?

고객이 내 매장을 방문했는데 기기에 내 앱이 설치되어 있지 않은 경우 iBeacon이 작동 할 수 있습니까? 아니면 먼저 앱을 설치해야합니까? 매일 매장을 방문하는 고객이 너무 많은데, 내 앱이 설치되어 있지 않으면 iBeacon 컨셉이 작동하나요?



답변

Android 5 이상 에서 가능하며 Android Beacon Library 에서 비콘 으로 전송하기위한 오픈 소스 코드를 찾을 수 있습니다 . Google Play 스토어 의 Beacon Scope 앱 에는 모든 기능을 갖춘 버전의 비콘 송신기가 있습니다.

다음은 Android Beacon 라이브러리를 사용하여 iBeacon을 전송하는 예입니다.

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 기기 에서 비콘으로 전송할 수도 있지만 시스템 권한으로 설치된 앱이 필요합니다.

BluetoothLE를 사용하는 Android 4.3 장치는 iBeacon을 볼 수 있지만 iBeacon으로 작동하지는 않습니다. Android 4.3은 주변 장치 모드를 지원하지 않기 때문입니다. 삼성 Android 기기에는 별도의 독점 SDK가 포함되어 있지만 기기가 iBeacon으로 작동하는 것도 허용하지 않습니다. 참조 : Samsung Android 기기를 iBeacon으로 광고하도록 설정 ) iOS 기기 는 iBeacon으로 작동 할 수 있습니다.

일반적으로 iBeacon 기술은 전화기가 다른 전화기를 볼 수 있도록 설계되지 않았습니다. 그러나 휴대폰이 iBeacon 역할을하고 주변의 다른 iBeacon을 찾도록하는 사용자 지정 앱을 만들어 iOS에서 제안한 것을 수행 할 수 있습니다. 이렇게하면 앱을 사용하는 모든 사람이 근처에서 동일한 앱을 사용하는 다른 사람을 볼 수 있습니다. 모든 전화기는 블루투스를 켜야합니다.

두 번째 질문에 답하려면 Android 또는 iOS 모바일 장치에 iBeacon을 활용하기위한 앱이 설치되어 있어야합니다. 특정 작업을 수행하도록 특별히 프로그래밍 된 앱이 설치되어 있지 않으면 현재 두 운영 체제 모두 iBeacon을 볼 때 아무 작업도 수행하지 않습니다. 따라서 매장에 도착한 고객은 앱이 이미 설치되어 있어야합니다. 그렇지 않으면 iBeacon과 상호 작용할 수 없습니다.


답변

, Android 기기는 iBeacon으로 작동 할 수 있습니다. 나는 android 5.X 및 AltBeacon library를 사용하여 이것을 달성합니다 . Radius Networks의 AltBeacon 라이브러리는 Android를 비콘 이미 터 및 수용체로 빌드하는 클래스도 제공합니다. 다음은 iBeacon으로 Android에서 작동하는 코드입니다.

 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


답변

순수 Android SDK. 제 3 자 코드 없음-오픈 소스 실사에 적합

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 마이너 시장을 배치하되 처음 2 바이트는 그대로 둡니다.


답변