5

Samsung GALAXY TAB 8.9 で BluetoothServerSocket を作成したいと考えています。(android 4.04) mmServerSocket.accept() を呼び出すと - スローされます:

「java.io.IOException: [JSR82] accept: 接続が作成されていません (失敗または中止されました)。」

私は多くの同様の記事を読みましたが、詳細な回答はありません。誰かが同様の問題を解決したか、この例外が何を意味するかを知っているかもしれません。

ありがとう。

Android の例「ChatExample」から取得したコード:

     public  class AcceptThread extends Thread {
    // The local server socket
    private final BluetoothServerSocket mmServerSocket;
    private String mSocketType;

    public AcceptThread(boolean secure) {            BluetoothServerSocket tmp = null;
        mSocketType = secure ? "Secure" : "Insecure";

        try {
                tmp = mAdapter.listenUsingInsecureRfcommWithServiceRecord(
                        NAME_INSECURE, MY_UUID_INSECURE);

        } catch (IOException e) {
            Log.e(TAG, "Socket Type: " + mSocketType + "listen() failed", e);
        }
        mmServerSocket = tmp;
    }

    public void run() {
        if (D) Log.d(TAG, "Socket Type: " + mSocketType +
                "BEGIN mAcceptThread" + this);
        setName("AcceptThread" + mSocketType);

        BluetoothSocket socket = null;

        // Listen to the server socket if we're not connected
        while (mState != STATE_CONNECTED) {
            try {
                // This is a blocking call and will only return on a
                // successful connection or an exception
               Log.d(TAG, "Socket " + socket + " | ServerSocket " + mmServerSocket);
               socket = mmServerSocket.accept();
               Log.d(TAG, "new accepted Socket with " + socket.getRemoteDevice().getName());

            } catch (IOException e) {
                Log.e(TAG, "Socket Type: " + mSocketType + "accept() failed", e);
            //    BluetoothServiceViaProtobuf.this.start();
                break;
            }

            // If a connection was accepted
            if (socket != null) {
                synchronized (BluetoothServiceViaProtobuf.this) {
                    switch (mState) {
                        case STATE_LISTENING:
                        case STATE_CONNECTING:
                            // Situation normal. Start the connected thread.
                            connected(socket, socket.getRemoteDevice(),
                                    mSocketType);
                            break;
                        case STATE_NONE:
                        case STATE_CONNECTED:
                            // Either not ready or already connected. Terminate new socket.
                            try {
                                socket.close();
                            } catch (IOException e) {
                                Log.e(TAG, "Could not close unwanted socket", e);
                            }
                            break;
                    }
                }
            }
        }
        if (D) Log.i(TAG, "END mAcceptThread, socket Type: " + mSocketType + "  "+ BluetoothServiceViaProtobuf.this.getState());

    }

    public void cancel() {
        if (D) Log.d(TAG, "Socket Type" + mSocketType + "stop " + this );
        try {
           mmServerSocket.close();
        } catch (IOException e) {
            Log.e(TAG, "Socket Type" + mSocketType + "close() of server failed", e);
        }
    }
}
4

0 に答える 0