Android设备可以充当iBeacon吗?


78

Android设备可以充当iBeacon并确定其他Android设备何时进入其范围吗?这些其他Android设备是否需要打开蓝牙?

如果客户进入我的商店,但他的设备上未安装我的应用程序,那么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

Answers:


75

YES这是可能的Android上5+,你可以找到开放源代码发送信标的Android灯塔图书馆。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设备可以看到iBeacons,但不能充当iBeacons,因为Android 4.3不支持外围设备模式。三星Android设备包含一个单独的专有SDK,但它也不允许设备充当iBeacons。请参阅:使Samsung Android设备做为iBeacon广告)iOS设备可以充当iBeacons。

通常,iBeacon技术不适合手机查看其他手机。但是您可以通过制作一个自定义应用程序来完成您在iOS上的建议,该应用程序可使手机充当iBeacon,并在其周围寻找其他iBeacon。这样一来,使用该应用的任何人都可以看到附近有该应用的其他人。所有手机都需要打开蓝牙。

要回答第二个问题,是的,必须安装一个移动设备(Android或iOS)才能利用iBeacons。除非安装了专门编程用于执行某项操作的应用程序,否则两种操作系统当前都不会在看到iBeacon时执行任何操作。因此,到达商店的客户必须已经安装了应用程序,否则他们无法与iBeacons进行交互。


1
还有这个!参见“ BLE外设模式”-> 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. 我怎样才能做到这一点?
拉夫2014年

2
如果您发布一个新问题,我会回答-没有足够的空间在评论中解释。
davidgyoung 2014年

好的和翔实的答案。但是我对这句话感到怀疑:“目前只有在三星设备上才能在Android上执行此操作。” 稍微上方一点就是,三星SDK不允许设备像iBeacons一样工作(并链接到具有相同答案的问题)。如果是这样的话...如果Android SDK不允许三星设备也可以像iBeacons一样运作,而Samsung SDK也没有此功能?
petersaints,2015年

1
是的,这是一个重要的澄清。Android 5.x +上的传输不仅需要芯片组支持,而且还需要ROM中的支持。例如,Nexus 5设备具有芯片组支持,但是Google在官方ROM中禁用了该支持。:我编了一个已知的支持设备列表,而不是支持传输这里 altbeacon.github.io/android-beacon-library/...
davidgyoung

17

是的,Android设备可以充当iBeacon。我使用android 5.x和AltBeacon库来实现这一点。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搜索为android有所帮助。j


感谢分享。:)
Hardik Joshi

这需要有根设备吗?
阿米塔布

不,不需要根设备:))
Yogesh

如何在本机操作?
user43286 '17

如何在cordova中实现呢?
Atul Verma'17

6

纯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次要市长放在有效负载中的那些位置,但将前两个字节保持不变。


感谢您的回答,我已经使它工作了,但是只有在使用tx功率向有效负载中添加了一个额外的字节之后,它才能正常工作。
何塞·佩雷达
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.