0

私は Bluetooth チャット サンプルを使用しており、デバイスをペアリングして、あるデバイスから別のデバイスにテキストを送信することは完全に問題ありませんが、時々切断され、最後に接続されたデバイスに再接続したいと思います。これを達成するにはどうすればよいですか。自動接続を試しましたプレイストアからのBluetoothですが、ヘッドセットとアプリ内からではなくアプリ外から接続します。

アプリ内からこれを達成するにはどうすればよいですか?

前もって感謝します。

E/BluetoothChatService(10175): accept() failed
E/BluetoothChatService(10175): java.io.IOException: Operation Canceled
E/BluetoothChatService(10175):  at android.bluetooth.BluetoothSocket.acceptNative(Native Method)
E/BluetoothChatService(10175):  at android.bluetooth.BluetoothSocket.accept(BluetoothSocket.java:311)
E/BluetoothChatService(10175):  at android.bluetooth.BluetoothServerSocket.accept(BluetoothServerSocket.java:107)
E/BluetoothChatService(10175):  at android.bluetooth.BluetoothServerSocket.accept(BluetoothServerSocket.java:93)
E/BluetoothChatService(10175):  at com.example.android.BluetoothChat.BluetoothChatService$AcceptThread.run(BluetoothChatService.java:276)




 E/BluetoothChatService(10175): disconnected
 E/BluetoothChatService(10175): java.io.IOException: Software caused connection abort
 E/BluetoothChatService(10175):     at android.bluetooth.BluetoothSocket.readNative(Native Method)
 E/BluetoothChatService(10175):     at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:333)
 E/BluetoothChatService(10175):     at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96)
 E/BluetoothChatService(10175):     at java.io.InputStream.read(InputStream.java:163)
 E/BluetoothChatService(10175):     at com.example.android.BluetoothChat.BluetoothChatService$ConnectedThread.run(BluetoothChatService.java:436)



 E/AndroidRuntime(10175): FATAL EXCEPTION: Thread-1274
 E/AndroidRuntime(10175): java.lang.NullPointerException
 E/AndroidRuntime(10175):   at com.example.android.BluetoothChat.BluetoothChatService.connectionLost(BluetoothChatService.java:242)
 E/AndroidRuntime(10175):   at com.example.android.BluetoothChat.BluetoothChatService.access$6(BluetoothChatService.java:221)
 E/AndroidRuntime(10175):   at com.example.android.BluetoothChat.BluetoothChatService$ConnectedThread.run(BluetoothChatService.java:443)E/BluetoothChat(10175): - ON PAUSE -
4

1 に答える 1

3

私はEclipse ATMを持っていないので、gEditを使用してこれを書きました。したがって、コーディング エラーがある場合は、遠慮なく編集してください。説明を簡単にするために、ここでは SharedPreferences を使用していません。使用したい場合はためらわないでください。

//Assuming that you have device address and is connected
private String partnerDevAdd="00:11:22:AA:BB:CC";
private boolean isConnected=true;

IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);

registerReceiver(mReceiver, filter);

// Create a BroadcastReceiver for bluetooth related checks
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        //We don't want to reconnect to already connected device
        if(isConnected==false){
            // When discovery finds a device
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                // Get the BluetoothDevice object from the Intent
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                // Check if the found device is one we had comm with
                if(device.getAddress().equals(partnerDevAdd)==true)
                    connectToExisting(device);
            }
        }

        if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
            // Get the BluetoothDevice object from the Intent
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

            // Check if the connected device is one we had comm with
            if(device.getAddress().equals(partnerDevAdd)==true)
                isConnected=true;
        }else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {
            // Get the BluetoothDevice object from the Intent
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

            // Check if the connected device is one we had comm with
            if(device.getAddress().equals(partnerDevAdd)==true)
                isConnected=false;
        }
    }
};

private void connectToExisting(BluetoothDevice device){
    new ConnectThread(device);
}

ConnectThread はこちらから入手できますhttp://developer.android.com/guide/topics/connectivity/bluetooth.html#ConnectingAsAClient

于 2013-06-15T05:29:06.613 に答える