6

我正在考虑使用 Google 的 Nearby API 来检测信标(Eddystone)。目前唯一的当前方法似乎是调用这里Nearby.Messages.subscribe()描述的。

问题是这似乎不适合在后台连续扫描。我的应用程序需要在后台继续监视信标,因此如果一个变得可见,它将执行对 REST API 的调用。基本上,我需要类似于Estimote SDK 提供的信标监控功能。

在不耗尽电池的情况下,这是否可以通过 Nearby API 实现?

4

3 回答 3

1

我意识到这个问题是关于如何使用 Nearby API,但我不知道如何使用它来满足您的要求。

如果您愿意接受替代方案,免费和开源的Android 信标库完全支持 Eddystone 信标。它的 API 以 iOS 监控/测距信标 API 为模型,因此它会准确地完成您想要的操作。

请参阅此处了解如何使用此库来监控 Eddystone 信标。

于 2015-10-20T19:33:42.467 回答
0

您也可以在后台订阅以接收 Intent 而不是 MessageListener 通知。背景扫描是低功率扫描,因此延迟可能非常长(检测信标甚至需要几分钟)。扫描在屏幕开启事件或其他应用程序请求时执行。因此,您会收到来自其他应用程序扫描的结果。

您可以使用应用程序上下文而不是活动上下文来创建 GoogleApiClient。从响应 BOOT_COMPLETED 广播的广播接收器调用它。

GoogleApiClient client = new GoogleApiClient.Builder(appContext)
    .addApi(Nearby.MESSAGES_API, new MessagesOptions.Builder()
        .setPermissions(NearbyPermissions.BLE)
        .build())
    .build();
client.connect();

客户端连接后(ConnectionCallbacks 的onConnected方法),您可以使用 PendingIntent订阅并创建处理该意图的广播接收器。

在广播接收器中,您可以使用 Nearby.Messages.handleIntent 方法处理意图,该方法使用与前台扫描相同的 MessageListener。

这种方法的问题之一是访问附近的权限。要允许用户批准对 Nearby 的访问,您需要 UI。我的解决方案是等待后台扫描,直到用户第一次打开应用程序并接受权限。接受后,您可以在后台订阅。

于 2016-10-27T17:19:01.310 回答
0

似乎做你想做的唯一方法是连续扫描,或者使用设备和信标位置在它们关闭时触发扫描。无论哪种方式,当您扫描或共享位置时,都会消耗电池电量。看起来 Estimote 信标使用定位方法,这可能是节省电池的更好方法。

于 2015-10-20T16:42:10.183 回答