好吧,我在这里有一个奇怪的问题。我正在开发一款Android游戏,我希望能够让Android手机检测到彼此的存在。
搜索其他玩家的设备将知道其他玩家设备的蓝牙mac地址(来自游戏数据库),但设备不会配对,设备也不会处于可发现模式。此外,只有少数设备可能被发现 - 因此扫描mac地址并不是什么大事。
我不需要连接到设备,我只需要回答一个简单的问题:这个设备附近有这个mac地址吗?
允许在另一个用户的屏幕上显示一个配对对话框......我不在乎他们选择的结果是什么......我只需要知道他们的设备是否在那里。
非常感谢任何帮助!
答案 0 :(得分:2)
此用例可能非常适合最近发布的Nearby API。请参阅附近的消息developer overview
Nearby有自己的运行时权限,可以避免添加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