Android 设备可以充当 iBeacon 吗?

一个 Android 设备可以像一个 iBeacon 一样,判断其他 Android 设备什么时候进入它的范围吗?其他 Android 设备需要打开蓝牙吗?

如果一个顾客来到我的商店,他的设备上没有安装我的应用程序,iBeacon 可以工作吗,或者他必须先安装应用程序?每天都有很多顾客光顾我们的商店,但是如果他们没有安装我的应用程序,iBeacon 的概念能起作用吗?

50244 次浏览

YES 这在 Android 5 + 上是可能的,你可以在 安卓灯塔图书馆中找到 作为信标传输的开源代码。在 Google Play Store 的 信标显示器应用程序中,还有一个功能齐全的信标发射器版本。

下面是一个通过 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);

您也可以在 根安卓4.4.3设备上作为信标进行传输,但它需要安装具有系统特权的应用程序。

带有蓝牙的 Android 4.3设备可以看到 iBeacons,但不能充当 iBeacons,因为 Android 4.3不支持外围模式。三星的 Android 设备包含一个独立的专有 SDK,但它也不允许设备充当 iBeacons。参见: 让三星的 Android 设备打出 iBeacon 的广告) iOS 设备,但是,可以作为 iBeacon。

通常情况下,iBeacon 技术不会让手机看到其他手机。但是你可以做你在 iOS 上建议的事情,制作一个自定义应用程序,让手机充当 iBeacon,并在手机周围寻找其他的 iBeacon。这将允许任何使用该应用程序的人看到附近使用同一应用程序的其他人。所有的手机都需要打开蓝牙。

要回答你的第二个问题,是的,一个移动设备,无论是 Android 还是 iOS,都必须安装一个应用程序来利用 iBeacon。当看到 iBeacon 时,两个操作系统目前都不会做任何事情,除非安装了专门用来做某事的应用程序。因此,进入商店的顾客必须已经安装了应用程序,否则他们无法与 iBeacons 进行交互。

是的,Android 设备可以充当 iBeacon。我使用 android 5.X 和 AltBeacon 图书馆实现了这一点。来自 Radius 网络的 AltBeacon 库提供类来构建机器人作为信标发射器和接收器。 下面是一些可以在 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 这样的 Android 系统有所帮助

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