5

我有 kontakt.io 信标,我尝试使用附近的 API 编写后台扫描应用程序。

我使用此方法订阅消息:

SubscribeOptions options = new SubscribeOptions.Builder()
            // Finds messages attached to BLE beacons. See
            // https://developers.google.com/beacons/
            .setStrategy(Strategy.BLE_ONLY)
            .build();

    Nearby.Messages.subscribe(mGoogleApiClient, getPendingIntent(), options)
            .setResultCallback(new ResultCallback<Status>() {
                @Override
                public void onResult(@NonNull Status status) {
                    if (status.isSuccess()) {
                        Log.i(TAG, "subscribed successfully");
                        mSubState = SubState.SUBSCRIBING;
                        // Start background service for handling the notification.
                        getActivity().startService(getBackgroundSubscribeServiceIntent());
                    } else {
                        Log.i(TAG, "could not subscribe");
                        handleUnsuccessfulNearbyResult(status);
                    }
                }
            });

我的代码是根据这个示例: https ://github.com/googlesamples/android-nearby/tree/master/messages/NearbyBackgroundBeacons

我正确接收消息,但是当我终止应用程序时,没有更多消息出现。

杀死应用程序后有什么方法可以从附近获取消息?

4

2 回答 2

1

还没有真正尝试过使用,但是您是否考虑过/检查过使用 Service?根据描述:

服务基本上可以采用两种形式:

开始

当应用程序组件(例如活动)通过调用 startService() 启动服务时,服务被“启动”。一旦启动,服务可以无限期地在后台运行,即使启动它的组件被破坏。通常,启动的服务执行单个操作并且不会将结果返回给调用者。例如,它可能通过网络下载或上传文件。操作完成后,服务应自行停止。

边界

当应用程序组件通过调用 bindService() 绑定到服务时,服务被“绑定”。绑定服务提供客户端-服务器接口,允许组件与服务交互、发送请求、获取结果,甚至通过进程间通信 (IPC) 跨进程执行此操作。绑定服务仅在另一个应用程序组件绑定到它时运行。多个组件可以一次绑定到服务,但是当所有组件都解除绑定时,服务将被销毁。

您可以创建一个Service连续运行扫描,直到您选择停止/销毁它的时间。文档本身已经有关于创建已启动服务的步骤。仔细阅读它。

于 2016-04-08T03:29:08.003 回答
0

有两种方法可以杀死应用程序。如果您在“设置”>“应用程序”中找到该应用程序并按“强制停止”,或者等效地运行adb shell am force-stop <package>,这也会终止附近的订阅。但是,如果您通过在最近视图中将应用程序滑开或使用来终止应用程序adb shell kill <process-id>,则附近订阅应该保持活动状态并使用 PendingIntent 唤醒您的应用程序。

于 2016-05-03T22:02:48.140 回答