4

Android デバイスからシリアル ポート プロファイル (SPP) をサポートするリモート Bluetooth デバイスにデータを送信しようとしています。ボタンを押すたびにソケットを開閉するたびに、遅すぎることに気付きます。Run() および Onclick() 関数で実行するソケット コマンドはどれですか? 以下は、Bluetooth IO を行うクラスです。

public class Selecteddevice extends Activity implements OnClickListener {

private static final String TAG = "THINBTCLIENT";
private BluetoothAdapter mBluetoothAdapter = null;
private BluetoothDevice device;
private BluetoothSocket btSocket = null;
private OutputStream outStream = null;

private static final UUID MY_UUID = 
        UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
public static String address;

@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.selecteddevice);
    findViewById(R.id.toggleButton1).setOnClickListener(this);
    findViewById(R.id.toggleButton2).setOnClickListener(this);
    findViewById(R.id.toggleButton3).setOnClickListener(this);

}

@Override
public void onStart() {
    super.onStart();

    String address = getIntent().getStringExtra("address");
    TextView tv1 = (TextView) findViewById(R.id.textView_address);
    tv1.setText("                       DEVICE ADDRESS:      " +  address);

    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    device = mBluetoothAdapter.getRemoteDevice(address);
    run();
}

public void run(){
    mBluetoothAdapter.cancelDiscovery();
    try {
        btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);

    } catch (IOException e) 
    {   
        Log.e(TAG, "ON START: Socket creation failed.", e);
    }

    try {
        btSocket.connect();

    } catch (IOException e) 
    {       
        Log.e(TAG, "sendTestByte: Socket connection failed.", e);
    }   
}

public void sendTestString(String s){
    try {
        outStream = btSocket.getOutputStream();

    } catch (IOException e) 
    {       
        Log.e(TAG, "sendTestByte: OutputStream creation failed.", e);
    }

    try {
        outStream.write(s.getBytes());
        Log.d(TAG, "sendTestByte: OutputStream write succeeded.");

    } catch (IOException e) 
    {       
        Log.e(TAG, "sendTestByte: OutputStream writefailed.", e);
    }       
}


public void onClick(View v){
    switch(v.getId())
    {
    case R.id.toggleButton1:
        this.sendTestString("1");
        break;
    case R.id.toggleButton2:
        this.sendTestString("2");
        break;
    case R.id.toggleButton3:
        this.sendTestString("3");
        break;
    }
}           

@Override
public void onPause() {
    super.onPause();
    if (outStream != null) {
        try {
            outStream.flush();
        } catch (IOException e5) 
        { 
            Log.e(TAG, "ON PAUSE: Couldn't flush output stream.", e5);
        }
    }
    try {
        btSocket.close();
    } catch (IOException e6) 
    {
        Log.e(TAG, "ON PAUSE: Unable to close socket.", e6);
    }
}

@Override
public void onStop() {
    super.onStop();

}

@Override
public void onDestroy() {
    super.onDestroy();

}

}


エラー メッセージとペアリングした後、プログラムがクラッシュします。

    07-27 13:00:57.483: E/THINBTCLIENT(7855): sendTestByte: OutputStream writefailed.
    07-27 13:00:57.483: E/THINBTCLIENT(7855): java.io.IOException: socket closed
    07-27 13:00:57.483: E/THINBTCLIENT(7855):   at  
    android.bluetooth.BluetoothSocket.write(BluetoothSocket.java:331)
    ...

私は何を間違っていますか?

ありがとう。

4

1 に答える 1