Почему я теряю соединение клиент / сервер Bluetooth? - PullRequest
2 голосов
/ 19 мая 2011

Я пытаюсь подключиться из настольного приложения (написанного на Java) к приложению Android через Bluetooth.
Для настольного приложения я использую BlueCove API.
Когда я запускаю сервер (настольное приложение) и запускаю приложение Android, соединение работает нормально.(т. е. клиент отправляет «Hello World», а сервер печатает его в консоли).Но когда я покидаю приложение (нажимая кнопку «Назад» или «Домой») и возвращаюсь к нему, сокетное соединение кажется потерянным.

Как проверить, подключен ли разъем Bluetooth?
Я хотел бы проверить подключение розетки, чтобы не было повторного подключения.

Что я должен написать (если это так) в методах onPause, onResume?
Я полагаю, что в методе onDestroy я должен закрыть сокет.

Вот исходный код клиентского сервера:
Сервер
Клиент

Я также пытался использовать IntentFilter для проверки состояния соединения, но это не сработало.

@Override
    public void onCreate(Bundle savedInstanceState) {
             // ..... 

        IntentFilter filter1 = new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED);
        IntentFilter filter2 = new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED);
        IntentFilter filter3 = new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED);
        this.registerReceiver(mReceiver, filter1);
        this.registerReceiver(mReceiver, filter2);
        this.registerReceiver(mReceiver, filter3);

}

//The BroadcastReceiver that listens for bluetooth broadcasts
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
           //Device found
            Toast.makeText(BluetoothClient.this, "Device not found", 2).show();
        }
        else if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
          //Device is now connected
            Toast.makeText(BluetoothClient.this, "Device connected", 2).show();
        }
        else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
          //Done searching
            Toast.makeText(BluetoothClient.this, "Done searching", 2).show();
        }
        else if (BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED.equals(action)) {
            //Device is about to disconnect
            Toast.makeText(BluetoothClient.this, "Device about to connect", 2).show();
        }
        else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {
         //Device has disconnected
            Toast.makeText(BluetoothClient.this, "Device disconnected", 2).show();
        }           
    }
};

1 Ответ

6 голосов
/ 24 мая 2011

Сервер
Клиент

Я изменил 2 файла исходного кода.
Теперь все должно работать нормально.Существуют небольшие ошибки, связанные с тем, что BT не открывается перед входом в мобильное приложение (оно слишком долго застревает), и тем, кто хочет использовать этот клиент / сервер, следует взглянуть на onPause(), onResume(), onDestroy() функций.

Проблема заключалась в том, что я неправильно использовал сокет.

Я надеюсь, что он будет полезен для тех, кто хочет реализовать такое приложение с BT.

...