Nearby Messages 是一种发布-订阅 API,可以让附近的设备 数据负载。设备发布消息后,附近的设备可以 收到消息。本指南将向您介绍 您的应用必须实现才能发布消息和订阅消息 使用 Nearby Messages API 通信。
附近的设备集取决于 蓝牙。当一台设备从附近设备检测到令牌时,它会发送 发送到 Nearby Messages 服务器,以对其进行验证,并检查是否存在 为应用的当前订阅集传递的消息。
应用可以控制用于设备发现的媒介集,以及 媒介是否用于广播令牌和/或扫描令牌。 默认情况下,广播和扫描在所有媒介上都完成。待办事项 或媒介上的发现,以及控制是广播还是扫描, 您必须在创建发布内容时传递额外的参数, 订阅。
在主动发布和订阅时,系统会显示“附近功能正在使用中”消息通知 以告知用户“附近”功能已启用。此通知是 仅当一个或多个应用正在使用“附近”功能时才会显示, 在不需要“附近”功能时节省电池续航时间。它提供 用户:
- 前往相应应用以停用“附近”功能。
- 强制应用停止使用“附近”功能。
- 前往附近设置屏幕。
您可以使用 PublishCallback()
和SubscribeCallback()
监听用户强行停止使用“附近”功能的情况。当
发生时,
onExpired()
方法。
由于 Nearby Messages API 可能会影响电池续航时间, 只应在前台 activity 中使用(但 BLE 后台订阅)。
调用 publish()
和/或 subscribe()
使用 Nearby Messages API。您的应用应始终
对称 unpublish()
和unsubscribe()
位于onStop()
中。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
mMessageListener = new MessageListener() {
@Override
public void onFound(Message message) {
Log.d(TAG, "Found message: " + new String(message.getContent()));
}
@Override
public void onLost(Message message) {
Log.d(TAG, "Lost sight of message: " + new String(message.getContent()));
}
}
mMessage = new Message("Hello World".getBytes());
}
@Override
public void onStart() {
super.onStart();
...
Nearby.getMessagesClient(this).publish(mMessage);
Nearby.getMessagesClient(this).subscribe(mMessageListener);
}
@Override
public void onStop() {
Nearby.getMessagesClient(this).unpublish(mMessage);
Nearby.getMessagesClient(this).unsubscribe(mMessageListener);
...
super.onStop();
}
发布消息
如需发布消息,请调用 Nearby.getMessagesClient(Activity).publish()
传递消息字节数组。我们建议将消息保留到
我们可以更快地传送 3KB 的邮件
需要它的应用。此服务并不适用于交换更大的对象,例如
例如照片和视频
您可以选择调用 PublishOptions.setStrategy()
。
以便设置策略
使用。
以下示例演示了如何调用 publish()
来发送一小段文本
消息:
private void publish(String message) {
Log.i(TAG, "Publishing message: " + message);
mActiveMessage = new Message(message.getBytes());
Nearby.getMessagesClient(this).publish(mActiveMessage);
}
取消发布消息
如需取消发布消息,请调用 unpublish()
。至少
应用应在其 onStop()
中调用“unpublish”
方法。传递相同的 Message
对象(在此示例中为 mActiveMessage
)。
以下代码示例展示了如何调用 unpublish()
:
private void unpublish() {
Log.i(TAG, "Unpublishing.");
if (mActiveMessage != null) {
Nearby.getMessagesClient(this).unpublish(mActiveMessage);
mActiveMessage = null;
}
}
订阅消息
如需通过其他设备订阅消息,请调用 Nearby.getMessagesClient(Activity).subscribe()
。您需要通过
MessageListener
处理接收订阅的消息。
您可以选择调用 SubscribeOptions.setStrategy()
。
以便设置策略
使用。
以下示例演示了如何订阅消息:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
mMessageListener = new MessageListener() {
@Override
public void onFound(Message message) {
Log.d(TAG, "Found message: " + new String(message.getContent()));
}
@Override
public void onLost(Message message) {
Log.d(TAG, "Lost sight of message: " + new String(message.getContent()));
}
}
}
// Subscribe to receive messages.
private void subscribe() {
Log.i(TAG, "Subscribing.");
Nearby.getMessagesClient(this).subscribe(mMessageListener, options);
}
退订
要退订并停止接收设备消息,请致电
Nearby.getMessagesClient(Activity).unsubscribe()
。将相同的
MessageListener
对象(在此示例中为 mMessageListener
)。
以下代码示例展示了如何取消订阅:
private void unsubscribe() {
Log.i(TAG, "Unsubscribing.");
Nearby.getMessagesClient(this).unsubscribe(mMessageListener);
}