android蓝牙聊天应用程序(设备立即失去连接)

时间:2011-02-02 16:54:17

标签: java android bluetooth

我在这里经历了几个主题,并没有遇到我遇到的问题的答案。

我的设置: 我有一台Mac PC,我用它作为虚拟串口与我的Android Nexus S手机进行通信。在手机上运行蓝牙聊天应用程序并将其用作客户端与我设置的virt comm进行通信。

最初我尝试使用2个Android手机的蓝牙聊天应用来确认它的工作原理。我可以来回发送文本。

我的用例: 我有一个设备读取RFid标签并将数据发送到Android手机以收集信息。

我现在用我的电脑来代表我的设备。

++++++++++++++++++ 好的,

我尝试从手机连接到电脑,最初我得到一个“连接......”状态栏更新,15秒左右后,我收到一条祝酒词,上面写着“我已经连接到电脑”,但是我得到“设备丢失连接”吐司。然后状态栏进入“未连接”

当我逐步使用调试器时,它似乎在蓝牙聊天应用程序的以下部分失败了。特别是这一行(bytes = mmInStream.read(buffer);

    public void run() {
        Log.i(TAG, "BEGIN mConnectedThread");
        byte[] buffer = new byte[1024];
        int bytes;

        // Keep listening to the InputStream while connected
        while (true) {
            try {
                // Read from the InputStream
                bytes = mmInStream.read(buffer);

                // Send the obtained bytes to the UI Activity
                mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer)
                        .sendToTarget();
            } catch (IOException e) {
                Log.e(TAG, "disconnected", e);
                connectionLost();
                break;
            }
        }
    }

当我查看logcat时,i / o异常是“software caused connection abort” 对于输入流上的read()。

问题: 这与我的虚拟端口设置不正确吗?我有终端并等待接收/dev/tty.Nexus上的输入.... 使用屏幕命令@ 9600 baud

否则,我想也许输入流连接到的套接字不可用。我打印到日志,似乎它不是NULL。每次我走过去虽然它死在 ConnectThread 而不是 ConnectedThread

以下代码部分:特别是此行(mmSocket.connect();

        public void run() {
        Log.i(TAG, "BEGIN mConnectThread");
        setName("ConnectThread");

        // Always cancel discovery because it will slow down a connection
        mAdapter.cancelDiscovery();

        // Make a connection to the BluetoothSocket
        try {
            // This is a blocking call and will only return on a
            // successful connection or an exception
            mmSocket.connect();
        } catch (IOException e) {
            connectionFailed();
            // Close the socket
            try {
                mmSocket.close();
            } catch (IOException e2) {
                Log.e(TAG, "unable to close() socket during connection failure", e2);
            }
            // Start the service over to restart listening mode
            BluetoothChatService.this.start();
            return;
        }

        // Reset the ConnectThread because we're done
        synchronized (BluetoothChatService.this) {
            mConnectThread = null;
        }

        // Start the connected thread
        connected(mmSocket, mmDevice);
    }

我想知道套接字变量是否由于多线程而丢失了范围并且套接字正在被传递?

由于

1 个答案:

答案 0 :(得分:0)

如何在Mac PC上设置虚拟序列帖子。既然您已尝试在2部手机上运行应用程序并且它正在运行,我认为问题出在PC上。

我发布了一篇关于Android和Java蓝牙here的条目。希望它会有所帮助。