Android 充当信标的设备
Android Device to Act as Beacon
如果这个问题不是 "SO approved" 类型的问题,我很抱歉。
我想开发一个充当信标(以及其他功能)的应用程序。此应用程序将安装在 Android 台设备上。
我对所有这些蓝牙编程都很陌生,我想就这些问题得到一些答案:
谁能指出我从哪里开始的正确部分?
客户端应用程序如何从信标获取通知?谁能解释它是如何工作的?
谢谢你,也很抱歉提出这些问题。
几点:
是的,您可以制作一个信标应用,从 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 开源项目的首席开发人员和 Locate 应用程序的作者。
如果这个问题不是 "SO approved" 类型的问题,我很抱歉。
我想开发一个充当信标(以及其他功能)的应用程序。此应用程序将安装在 Android 台设备上。
我对所有这些蓝牙编程都很陌生,我想就这些问题得到一些答案:
谁能指出我从哪里开始的正确部分?
客户端应用程序如何从信标获取通知?谁能解释它是如何工作的?
谢谢你,也很抱歉提出这些问题。
几点:
是的,您可以制作一个信标应用,从 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 开源项目的首席开发人员和 Locate 应用程序的作者。