【问题标题】:Android Device to Act as Beacon充当信标的 Android 设备
【发布时间】:2016-02-13 07:20:25
【问题描述】:

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

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

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

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

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

感谢您对这些问题表示歉意。

【问题讨论】:

  • 信标只是广播一个识别号;客户端设备上的应用程序必须设置为扫描该特定标识符并采取一些措施。使用 Android 设备作为信标可能有点矫枉过正,因为您只需花费 15 美元左右就可以使用小型纽扣电池大小的信标或插入 USB 端口的信标
  • 该应用还有其他功能。 the app on the client device has to be set up to scan for that particular identifier and take some action。这是否意味着应用必须为此目的在后台运行?
  • 是的。在 iOS 上,您使用 CoreLocation 后台模式。我相信 Android 上也有类似的东西。
  • 话虽如此,最好是选择 iBeacon 而不是 Eddystone,反之亦然? @Paulw11 谢谢你的帮助!
  • 嗯,iOS 原生支持 iBeacon。我不确定 Eddystone 是否兼容

标签: android ios bluetooth ibeacon eddystone


【解决方案1】:

几点:

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

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

  • 如果您希望您的客户端应用在 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 开源项目的首席开发人员,也是 Locate 应用的作者。

【讨论】:

  • The important part to understand us that the client code does all of the message sending locally。如果是这样的话,一些类似的应用程序如何设法通过“所有商品折扣 20%”之类的方式通知客户。这怎么可能?谢谢你的回答!
  • 感谢您花时间回答。因此,总而言之,没有办法生成动态通知。比如说,当商店应用程序将折扣提高到 30% 或类似的东西时?
  • 是的,这是可能的。常见的方法是使用网络服务在信标标识符和通知消息之间进行查找。这样您就可以远程更改报价,而无需更新应用程序或更改信标发射器。
  • 感谢您的耐心和解释!!
猜你喜欢
  • 2020-06-09
  • 1970-01-01
  • 2013-12-12
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多