通过蓝牙检测附近的另一个安卓设备

6

好的,我有一个有点奇怪的问题。我正在开发一款Android游戏,希望能够让Android手机检测到彼此的存在。

搜索其他玩家的设备将知道其他玩家设备的蓝牙MAC地址(从游戏数据库中获取),但是这些设备不会配对,也不会处于可发现模式。此外,可能被找到的设备只有少数几个 - 所以扫描MAC地址并不是什么大问题。

我不需要连接到这些设备,我只需要回答一个简单的问题:这个设备与这个MAC地址附近吗?

可以在其他用户的屏幕上出现配对对话框...我不在乎他们的选择结果...我只需要知道他们的设备是否在那里。

非常感谢您的帮助!


经过更多的研究,似乎可以通过在Android中使用SDP和一些隐藏的方法来实现这一点:http://wiresareobsolete.com/wordpress/2010/11/android-bluetooth-rfcomm/我希望即使设备是不可发现的,我也能够使用这种SDP技术。 - ebarch
这么长时间过去了,关于蓝牙接近性问题,你有什么更新吗?我知道它有这个功能,但我想拥有或实现自己的方法calcDistanceOfBluetoothDevice,即使它是一个近似计算! - George Pligoropoulos
有人成功了吗?我真的需要这个功能。 - wonsuc
1个回答

4
这个使用案例可能非常适合最近发布的附近 API。请参见附近消息 开发者概述
附近具有自己的运行时权限,无需将 BLUETOOTH_ADMIN 或类似内容添加到您的清单中。它通过利用多种技术(经典蓝牙、BLE、超声波)在 iOS 和 Android 上工作。有一个选项只使用超声波调制解调器,将范围缩小到约 5 英尺。
下面是一个部分示例,您可以在 GitHub 上找到更完整的示例。
// Call this when the user clicks "find players" or similar
// In the ResultCallback you'll want to trigger the permission
// dialog
Nearby.Messages.getPermissionStatus(client)
  .setResultCallback(new ResultCallback<Status>() {
    public void onResult(Status status) {
      // Request Nearby runtime permission if missing
      // ... see github sample for details
      // If you already have the Nearby permission,
      // call publishAndSubscribe()
    }
  });

void publishAndSubscribe() {
  // You can put whatever you want in the message up to a modest
  // size limit (currently 100KB). Smaller will be faster, though.
  Message msg = "your device identifier/MAC/etc.".getBytes();
  Nearby.Messages.publish(googleApiClient, msg)
      .setResultCallback(...);

  MessageListener listener = new MessageListener() {
    public void onFound(Message msg) {
      Log.i(TAG, "You found another device " + new String(msg));
    }
  });

  Nearby.Messages.subscribe(googleApiClient, listener)
    .setResultCallback(...);
}

免责声明 我在附近 API 上工作


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接