2013-06-14 3 views
0

Я использую образец Bluetooth-чата, и он отлично справляется с подключением устройств и отправкой текста с одного устройства на другое, но иногда он отключается, и я хотел бы снова подключиться к последнему подключенному устройству. Я достиг этого. Я попробовал автоподключение 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 - 
+0

Я не сделал точно так, как ваше требование, но вы можете добиться этого путем сохранения подключенного адреса устройства в общие настройки, а затем использовать широковещательный приемник, чтобы обнаружить, если этот адрес находится в списке обнаружения. Если есть, то вы можете связаться с ним. Следуйте по этой ссылке для приемника broasdcast http://developer.android.com/guide/topics/connectivity/bluetooth.html – Milan

+0

Спасибо Милаксикс за то, что заглянул в мой запрос. Мне хотелось бы, чтобы только данные отправлялись не на аудио/гарнитуру, а на сделанное в приложении для подключения Bluetooth в магазине воспроизведения. Так как я могу достичь этого PLease, вы можете предоставить более ясную информацию о том, как достичь вышеуказанного требования, возможно, ссылку или рабочий пример. Спасибо снова за ваше время. – James

ответ

3

Написал это с помощью gEdit, поскольку у меня нет затмения atm. Поэтому, если есть некоторая ошибка кодирования, пожалуйста, не стесняйтесь редактировать это. Для удобства объяснения я не использовал 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

+0

Удивительно, что это сработало! .. Вы знаете, как поддерживать подключение Bluetooth-устройства до его подключения? Я использую thread.sleep в обработчике и его работоспособность, но после его подключения цикл работает снова. Я хотел бы закончить цикл, как это сделать. В основном продолжайте цикл до его подключения. Все идеи? – James

+0

новой темы (новый Runnable() { \t общественных недействительный запуск() { \t // TODO Auto-генерироваться метод заглушки \t время (истинной) \t { \t TRY { \t \t \t \t \t Thread.sleep (5000); \t \t \t \t} задвижка (InterruptedException е) {\t \t \t \t \t // TODO Автоматически созданный блок захвата \t \t \t \t \t e.printStackTrace(); \t \t \t \t} \t // ОСТАЛЬНЫЕ КОД ЗДЕСЬ // подключения(); \t} } \t}). Start(); \t \t \t \t} – James

+0

Как закончить цикл выше? – James

Смежные вопросы