2015-10-20 76 views
6

我正在寻找使用Google的Nearby API来检测信标(Eddystone)。目前唯一的当前做法似乎是Nearby.Messages.subscribe(),如here所述。附近的API,在背景中扫描信标的正确方法是什么?

问题是,这似乎不适合在后台连续扫描。我的应用程序需要在后台监视信标,以便在可见的情况下执行对REST API的调用。基本上,我需要类似于Estimote SDK提供的beacon monitorning功能。

这可以通过附近的API来实现而不会消耗电池吗?

回答

0

这似乎是唯一的方法来做你想做的是要么不断扫描,要么使用设备和信标位置触发扫描时,他们是接近。无论哪种方式,当您扫描或共享位置时,都会有电量耗尽。看起来像Estimote信标使用定位方法,这可能是节约电池方面更好的方法。

2

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

如果您愿意接受替代方案,免费开放源代码Android Beacon Library已完全支持Eddystone信标。它的API是在iOS监视/测距信标API之后建模的,因此它将按照您的要求进行。

See here关于如何使用此库来监视Eddystone信标。

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方法),则可以使用subscribe和的PendingIntent创建处理的意图广播接收器。

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

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

相关问题