1

Bluetooth デバイスからできるだけ適切に切断しようとしていますが、Android はシステム エラーをスローすることを主張しています。

09-02 15:16:16.748: W/System.err(31038): java.io.IOException: Operation Canceled
09-02 15:16:16.748: W/System.err(31038):    at android.bluetooth.BluetoothSocket.readNative(Native Method)
09-02 15:16:16.748: W/System.err(31038):    at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:333)
09-02 15:16:16.748: W/System.err(31038):    at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:60)
09-02 15:16:16.748: W/System.err(31038):    at com.bluetooth.BluetoothRemoteControlApp$ConnectedThread.run(BluetoothRemoteControlApp.java:207)

私は BluetoothChat サンプル プログラムの修正版を使用しており、接続スレッドは次のようになります。

private class ConnectedThread extends Thread {
    private final BluetoothSocket mmSocket;
    private final InputStream mmInStream;
    private final OutputStream mmOutStream;

    public ConnectedThread(BluetoothSocket socket) {
        mmSocket = socket;
        InputStream tmpIn = null;
        OutputStream tmpOut = null;

        try {
            tmpIn = socket.getInputStream();
            tmpOut = socket.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }

        mmInStream = tmpIn;
        mmOutStream = tmpOut;

        connected = true;
    }

    public void run() {
        byte[] buffer = new byte[1024];
        int bytes;
        byte ch;

        while(connected) {
            try {
                bytes = 0;
                while((ch = (byte) mmInStream.read()) != '\n')
                {
                    buffer[bytes++] = ch;
                }

                busy = false;

                String msg = new String(buffer, "UTF-8").substring(0, bytes - 1);

                Log.d(TAG, "Read: " + msg);

                if(activityHandler != null) {
                    activityHandler.obtainMessage(BT_READ, bytes, 0, msg).sendToTarget();
                }

            }
            catch(IOException e) {
                //e.printStackTrace();
                Log.w(TAG, "Cancelling");
                break;
            }
        }
    }

    public void write(byte[] buffer) {
        // . . .
    }

    public void cancel() {
        Log.i(TAG, "Cancelling connected thread");
        try {
            mmSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

切断中に、システム エラーをスローする cancel メソッドを呼び出します。心配して直そうとするべきでしょうか?ログにエラーが表示されるのはあまり好きではありません...

4

2 に答える 2

1

キャンセルしていて、ログ自体にOperation Cancelled.

run メソッドで e.printStacktrace を使用してログを出力していると思います。そのため、このログが表示されています。

于 2012-09-02T14:13:19.943 に答える
0

cancel メソッドで connected を false に設定する必要があるかもしれません。

于 2013-03-08T12:09:56.833 に答える