附近的API,在后台扫描信标的正确方法是什么?

时间:2015-10-20 13:55:56

标签: android eddystone google-nearby

我正在使用Google的Nearby API来检测信标(Eddystone)。目前唯一的方法似乎是按照here所述调用Nearby.Messages.subscribe()

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

使用Nearby API是否可以在不耗尽电池的情况下实现这一目标?

3 个答案:

答案 0 :(得分:1)

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

如果您对替代品持开放态度,免费和开源Android Beacon Library完全支持Eddystone信标。它的API是在iOS监控/测距信标API之后建模的,因此它可以完全按照您的需要进行操作。

See here了解如何使用此库监控Eddystone信标。

答案 1 :(得分:0)

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

答案 2 :(得分: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 subscribe并创建处理意图的广播接收器。

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

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