Android设备充当灯塔

时间:2016-02-13 07:20:26

标签: android ios bluetooth ibeacon eddystone

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

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

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

  1. 有人能指出正确的部分,从哪里开始?

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

  3. 谢谢你,对不起这些问题。

1 个答案:

答案 0 :(得分:2)

几点:

  • 是的,您可以创建一个从Android设备发送iBeacon和/或Eddystone信标传输的信标应用。您需要支持传输的Android 5.0+设备(并非所有人都这样做。您可以看到此类设备的列表hereAndroid Beacon Library显示了如何编码转移here。还有一个现成的Locate app支持传输。

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

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

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

为了说明如何基于信标标识符发送本地通知,以下是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开源项目的首席开发人员和Locate应用程序的作者。