0

如果这个问题不是“如此批准”类型的问题,我很抱歉。

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

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

  1. 谁能指出我从哪里开始?

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

谢谢你,很抱歉这些问题。

4

1 回答 1

4

几点:

  • 是的,您可以制作一个信标应用程序,从 Android 设备发送 iBeacon 和/或 Eddystone 信标传输。 您需要一台支持传输的 Android 5.0+ 设备(并非所有设备都支持)。您可以在此处查看此类设备的列表。Android 信标库这里展示了如何进行代码传输。这里还有一个现成的Locate 应用程序支持传输。

  • 也可以在iOS上做一个发射器信标app,但是iOS只支持传输iBeacon数据包(在iOS上不能传输Eddystone),并且iOS在app在后台时无法传输。安卓可以。

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

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

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

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 开源项目的首席开发人员,也是 Locate 应用程序的作者。

于 2016-02-13T11:56:32.617 回答