【问题标题】:Detect presence of nearby devices android检测附近设备的存在android
【发布时间】:2017-02-05 09:44:14
【问题描述】:

我尝试实现的应用程序的一部分涉及检测附近使用同一应用程序的 Android 设备。用例是这样的,假设我们有设备 A 和 B 建立联系:

  • 如果设备彼此靠近(蓝牙范围关闭),两台设备上都会显示一条消息:A 说它检测到 B,B 说它检测到 A
  • 如果两台设备彼此断开连接,则两台设备上也应显示一条消息:A 表示与 B 的连接断开,B 表示与 A 的连接断开
  • 如果他们在同一应用程序运行期间再次联系,他们应该重新连接

我尝试同时使用 Google Nearby API 和 Google Nearby Messages API,但我一直遇到问题。

您会推荐一个选项,以便我可以专注于那个选项吗?

【问题讨论】:

  • 嘿,您需要说明您面临的问题是什么。顺便说一句,Google Nearby Message API 使用蓝牙、BLE 和 Wi-Fi 在设备之间建立通信。一些旧设备不支持 BLE 广播。两台设备都需要连接到互联网(不一定是同一个网络),并且在两台设备上,托管 API 的应用程序应该具有相同的 APP KEY
  • 您好,是的,两台设备都已连接到互联网并且具有相同的 com.google.android.nearby.messages.API_KEY。我无法检测到这两个设备何时不再能够“看到”对方。另外,我尝试让两个设备同时成为发布者和订阅者,这有意义吗?
  • 是的,让设备发布者和订阅者都可以。我们已经使用蓝牙低功耗 (BLE) 实现了类似的功能(但每个设备在一个实例中要么是发布者,要么是订阅者,而不是两者)离开。无论如何,我已经给出了答案(太长了,无法发表评论)。检查这是否对您有帮助

标签: android bluetooth google-nearby


【解决方案1】:

我强烈建议您停止采用蓝牙和 google-nearby api 来帮助您解决这个问题。如果您改用套接字编程会更好。它实际上允许您检测连接到单个 WiFi 网络的所有设备。例如,假设您有自己的套接字协议正在运行节目,那么您可以轻松地管理任务。考虑在这个问题上使用 DatagramSocket 和 DatagramPacket 策略。所以假设你有几个设备,A、B、C、D

  1. 设备 A、B、C、D 内部建立 DatagramSocket 并开始监听特定 IP 地址和特定端口上的 DatagramPackets
  2. 因此,一旦您在设备 A、B、C、D 上建立了DatagramSocket,您就会知道在设备上独立运行的 DatagramSocket 的 IP 地址和端口号
  3. 最终您可以使用DatagramPacket 允许设备 A、B、C、D 在它们之间共享数据

我实际上已经实现了这个想法,如果您在这方面进一步研究,请告诉我们

【讨论】:

  • 如果我的设备不在同一个 WiFi 网络中怎么办?它们都连接到互联网,但不是通过 WiFI
  • 那么鉴于 Socket 将绑定的 IP 地址是 STATIC,那么也许有一个明确的解决方案。否则,这只是另一个 RENT-A-WEBSERVER 问题。
【解决方案2】:

使用 Google Nearby Message API 时,订阅者始终可以知道它何时与发布者失去了连接。查看 Google 文档中的示例代码

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    mMessageListener = new MessageListener() {
        @Override
        public void onFound(Message message) {
            String messageAsString = new String(message.getContent());
            Log.d(TAG, "Found message: " + messageAsString);
        }

        @Override
        public void onLost(Message message) {
            String messageAsString = new String(message.getContent());
            Log.d(TAG, "Lost sight of message: " + messageAsString);
        }
    }
}

参考 - https://developers.google.com/nearby/messages/android/pub-sub

【讨论】:

  • 嗨,我也是从那里获得灵感的。不知何故,我无法使其正常工作。当我只使用 Google Nearby API 时,我无法让发布者在失去与互联网的连接后重新连接到其订阅者。不过,我将使用 Google Nearby Messages API 进一步研究这个方向并尝试找到解决方案。如果你熟悉 iOS,我想做的是完成类似于 GameKit 传感器正在做的事情developer.apple.com/reference/gamekit/gksession
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
  • 2016-01-07
  • 2015-01-30
  • 1970-01-01
相关资源
最近更新 更多