使用Android Nearby API检测Beacon(Eddystone)

时间:2015-08-03 08:24:37

标签: java android

我正在尝试检测身边的信标,但使用Nearby API,我似乎无法找到它们。

我正在使用此方法检测附近的设备:

public void startDiscovery(String serviceId, final OnDiscoveryListener l) {

    Nearby.Connections.startDiscovery(googleApiClient, serviceId, Connections.DURATION_INDEFINITE, new Connections.EndpointDiscoveryListener() {
        @Override
        public void onEndpointFound(String endpointId, String deviceId, String serviceId, String endpointName) {
            if (l != null) {
                l.onEndpointFound(endpointId, deviceId, serviceId, endpointName);
            }

        }

        @Override
        public void onEndpointLost(String s) {
            if (l != null) {
                l.onEndpointLost(s);
            }
        }
    })
            .setResultCallback(new ResultCallback<Status>() {
                @Override
                public void onResult(Status status) {
                    if (l != null) {
                        l.onResult(status);
                    }
                }
            });
}

听众看起来像这样:

public interface OnDiscoveryListener {
    public void onResult(Status status);

    public void onEndpointFound(String endpointId, String deviceId, String serviceId, String endpointName);

    public void onEndpointLost(String s);
}

但是我找不到任何东西

4 个答案:

答案 0 :(得分:4)

我在Google上使用Nearby API。上面的代码片段使用了Nearby Connections API - 它实际上适用于不同的用例。要使用Eddystone,请使用Nearby Messages API。这里an example使用附近的消息来订阅信标的存在

请注意,您需要首先使用Proximity Beacon API将消息有效负载与信标关联。

答案 1 :(得分:2)

尽管Google宣传使用Nearby API来检测我们周围的信标:

  

适用于Android和iOS的附近API可让应用程序更轻松地查找附近设备和信标并与之通信

     

来源:http://android-developers.blogspot.be/2015/07/lighting-way-with-ble-beacons.html

我无法使用Nearby API来检测Eddystone信标。我将在研究过程中描述我收集的所有信息,希望这可能会节省一些人的时间。

我设置了与您相同的代码来检测Estimote信标,但我无法找到提供给Nearby.Connections.startDiscovery()的服务ID以使其检测到我的信标(我尝试使用信标UUID和一些变种没有成功)。

我在Estimote的网站上发现,您需要更新信标固件才能将其配置为Eddystone信标:http://developer.estimote.com/eddystone/#configure-estimote-beacons-to-broadcast-eddystone。我不是这样做的。

然而,这并没有解决我的问题,我仍然无法使用Nearby API检测到信标。我尝试将其设置为Eddystone-UID和Eddystone-URL,并尝试了几种组合(基于Estimote应用程序提供的信息)作为服务ID失败。

更深入地了解Nearby API的文档显示,Google在其附近的API文档(https://developers.google.com/nearby/connections/overview)中没有提及有关信标和Eddystone的任何内容,而Google的信标样本根本没有使用Nearby API: https://github.com/google/beacon-platform/tree/master/samples/android

然而,他们确实提到附近消息将允许丰富的互动,例如“协作编辑,组建团队,投票,<强>或广播资源”,并即将推出:

  

即将推出:Google Play服务7.8中将提供Nearby Messages API。当新版本可用时,将使用完整的API文档更新此站点。

     

来源:https://developers.google.com/nearby/

我的理解是,由于信标正在广播资源,因此Google Play Services 7.8将提供对信标的支持。

与此同时,如果您仍希望能够检测到周围的Eddystone信标,您可以使用Estimote的Android SDK:https://github.com/estimote/android-sdk#quick-start-for-eddystone 或者实现与Google的Beacon Proximity样本相同的代码: https://github.com/google/beacon-platform/tree/master/samples/android

答案 2 :(得分:0)

这可能听起来很奇怪 - 但试着打开和关闭wifi。很多便宜的设备都非常糟糕,蓝牙无法连接,但出于某种原因关闭和关闭wifi已经有一段时间了。

我遇到了类似的问题 - 我的代码中的所有内容都是正确的但未检测到信标。我甚至试过制造商应用程序,他们也无法检测到信标(但他们的iPhone版本确实如此)。我关闭了我的wifi,然后重新开启,制造商应用程序也工作了,我的也是如此。

答案 3 :(得分:0)

是的,您可以使用Nearby API发现Eddystone信标。但是要检测信标,你必须使用Nearby Messages API而不是Nearby Connections API,正如@Andrew Bunner所提到的那样。

为了能够使用NearbyMessagesAPI检测信标,您还必须首先使用Google注册信标,然后将其配置为与其关联的消息有效负载。

您可以在我发布的blog post或此other answer中找到所有步骤。