我正在为 Apress 编写 Google Glass 开发书籍,并且刚刚完成了网络和蓝牙一章,其中包含一些工作示例,可以让 Glass 与 iPhone 通信以进行数据传输。没错,Glass 目前(API 级别 15)不支持低功耗蓝牙(BLE)。我已经实现了三种方法来实现 Glass 和 iOS 之间的数据传输:
让 Glass 通过经典蓝牙或套接字与 Android 设备(例如带有 BLE 支持的 Android 4.3 或更高版本的 Nexus 7)对话,而 Nexus 7 充当 BLE 中心,作为 BLE 外围设备与 iOS 对话。请注意,您不应使用 BLE 发送照片等大数据。
让 Glass 直接通过套接字与 iOS 对话 - 您可以使用作为服务器运行的 C 套接字代码和 Glass Java 套接字客户端,反之亦然。这需要您的 Glass 和 iOS 设备在同一个 Wifi 上,但可以传输大量数据。
使用基于服务器的解决方案 - 将数据从 Glass 上传到服务器,然后让 iOS 通过 Apple 推送通知获取数据。我使用这种方法在 WhatsApp 和微信上与朋友分享 Glass 上的照片,这两个应用程序都在 iOS 上运行。
充当套接字服务器的示例 iOS 代码:
- (void) runSocketServer {
int listenfd = 0;
__block int connfd = 0;
struct sockaddr_in serv_addr;
__block char sendBuff[1025];
listenfd = socket(AF_INET, SOCK_STREAM, 0);
memset(&serv_addr, '0', sizeof(serv_addr));
memset(sendBuff, '0', sizeof(sendBuff));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(6682);
bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
listen(listenfd, 10);
dispatch_async(dispatch_get_global_queue(0, 0), ^{
connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);
int count = 1;
while (count++ < 120) {
char rate[100];
sprintf(rate, "%i\n", bpm);
write(connfd, rate, strlen(rate));
sleep(1);
}
close(connfd);
});
}
充当套接字客户端的示例 Glass 代码:
public void run()
{
String serverName = "192.168.1.11";
int port = 6682;
try
{
socket = new Socket(serverName, port);
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
do {
result = input.readLine();
runOnUiThread(new Runnable() {
public void run() {
mTvInfo.setText(result);
}
});
} while (result != null);
});
}
catch(Exception e) {
try { socket.close(); }
catch (Exception e2) {};
e.printStackTrace();
}
}