代码之家  ›  专栏  ›  技术社区  ›  W. Wright

在iPhone和Google Glass之间传输数据

  •  4
  • W. Wright  · 技术社区  · 10 年前

    我希望将手机连接到我的谷歌眼镜,并在两者之间传输数据(照片、文本等)。

    我在考虑使用蓝牙LTE,但据我所知,Glass不支持它,因为它只运行4.0.3版本(或类似版本)的Android。

    我知道你可以通过myGlass应用程序连接手机和玻璃,所以很明显,我想做的是可能的。然而,我想知道是否有人能给我指出正确的方向来开始?具体来说,如果iOS端没有CoreBluetooth,我应该考虑哪些技术?还有人这样做过吗?

    此外,如果使用Bonjour更好,或者甚至在我的iPhone上创建热点并以这种方式连接,那么您可以向我介绍的任何教程都会很棒。

    提前感谢。

    2 回复  |  直到 10 年前
        1
  •  3
  •   Jeff Tang    10 年前

    我正在为Apress撰写一本谷歌眼镜开发书,刚刚完成了网络和蓝牙一章,其中包括一些让眼镜与iPhone进行数据传输的工作示例。你是对的,到目前为止,Glass(API级别15)不支持蓝牙低能耗(BLE)。我实施了三种方法来实现Glass和iOS之间的数据传输:

    1. 让Glass通过经典蓝牙或插座与Android设备通话,如支持BLE的Android 4.3或更高版本的Nexus 7,Nexus 7充当BLE中心,作为BLE外围设备与iOS通话。请注意,您不应使用BLE发送照片等大型数据。

    2. 让Glass直接通过套接字与iOS通信-您可以使用作为服务器运行的C套接字代码和Glass Java套接字客户端,反之亦然。这将需要您的Glass和iOS设备在同一个Wifi上,但可以传输大量数据。

    3. 使用基于服务器的解决方案-将数据从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();
        }
    }
    
        2
  •  0
  •   Funkavenger    10 年前

    你试过设置谷歌备份吗?您可以立即从玻璃中获取照片并在手机上查看(但反之亦然)。

    否则,目前市场上没有办法实现这一点,但这里有几个想法:

    1. 您可以将其作为应用程序创意提交给以下用户之一:

    http://glass-apps.org/google/glass-app-ideas https://plus.google.com/communities/107405100380970813362/stream/b18a5f3c-e170-40a8-991f-823f018e75af

    1. 或者你可以自己建造。GDK非常强大。你还不能将gdk应用程序提交给谷歌,但这对于个人使用来说非常好。这家伙开始研究它,他的github在这里: https://github.com/NathanielWaggoner/GoogleGlassBlutooth