Android 充当信标的设备

Android Device to Act as Beacon

如果这个问题不是 "SO approved" 类型的问题,我很抱歉。

我想开发一个充当信标(以及其他功能)的应用程序。此应用程序将安装在 Android 台设备上。

我对所有这些蓝牙编程都很陌生,我想就这些问题得到一些答案:

  1. 谁能指出我从哪里开始的正确部分?

  2. 客户端应用程序如何从信标获取通知?谁能解释它是如何工作的?

谢谢你,也很抱歉提出这些问题。

几点:

  • 是的,您可以制作一个信标应用,从 Android 设备发送 iBeacon and/or 和 Eddystone 信标传输。 你需要一台 Android 5.0+ 支持传输的设备(不是所有的都支持)。您可以在此处查看支持传输的此类设备列表 here. The Android Beacon Library shows how to code transmission here. There is also an off-the-shelf Locate app

  • 也可以在iOS上制作发射器信标应用程序,但是iOS只支持传输iBeacon数据包(您不能在iOS上传输Eddystone ), iOS 应用程序在后台时无法传输。 Android可以。

  • 如果您希望您的客户端应用程序在 iOS 的后台快速检测,您最好使用 iBeacon 而不是 Eddystone。 iBeacon 信号的检测在 iOS 的后台进行了优化,并且是内置的。 检测 Eddystone 需要额外的软件并且速度不快。

  • 要发送有关信标发现的通知,您只需在客户端应用程序中编写代码来检测唯一的信标标识符,然后创建一个与信标标识符绑定的本地通知消息并将其发送给用户。了解我们的重要部分是 客户端代码在本地发送所有消息。信标应用程序所做的只是传输客户端应用程序接收到的唯一标识符。

为了说明如何根据信标标识符发送本地通知,这里是 iOS 的一些示例代码。此代码在客户端应用程序上运行。 Beacon 只是发送带有特定信标标识符的传输,客户端应用程序读取它们并采取适当的行动。

var lastNotificationTime = NSDate(timeIntervalSince1970: 0) // Initialize last Notification time to a long time ago

func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) {
  // Only send notification if we have not done so in the last hour (3600 seconds)
  if (lastNotificationTime.timeIntervalSinceNow < -3600.0) {
    for beacon in beacons {
      // Send a 20% off notification for beacon with identifiers major 1, minor 2
      if beacon.major.intValue == 1 && beacon.minor.intValue == 2 {
        let localNotification = UILocalNotification()
        localNotification.alertTitle = "Discount 20% on all items"
        dispatch_async(dispatch_get_main_queue()) {
          UIApplication.sharedApplication().presentLocalNotificationNow(localNotification)
        }
      }
    }
  }
}

完全披露:我是 Android Beacon Library 开源项目的首席开发人员和 L​​ocate 应用程序的作者。