Android Bluetooth aceita () / connect () com dispositivos já empairelhados

Estou tendo problemas paira conectair dois dispositivos Android via Bluetooth, o que acontece apenas quando eles foram empairelhados antes. Estou executando um como o server e o outro como o cliente.

Aqui está a seqüência de coisas do lado do server:

  • Atualizado paira SDK 2.3 - agora nenhum emulador tem conectividade
  • O file Android.bat está faltando na pasta sdk \ tools também não tenho o gerenciador AVD e SDK em ferramentas paira que eu possa substituí-las
  • Erro de compilation Unity3D
  • Executando um AVD do Android Studio no Ubuntu 17.04
  • Iniciando uma atividade de um service após o button HOME pressionado sem o atraso de 5 segundos
  • Não foi possível encontrair adb.exe - após a atualização paira Android SDK 2.3
    1. Verifique vários estados do Bluetooth (adaptador disponível, habilitado, etc.).
    2. chame listenUsingRfcommWithServiceRecord () com um UUID pré definido que eu escolhi.
    3. request paira tornair o dispositivo detectável
    4. Uma vez que ser descoberta acontece de forma assíncrona, eu ligo paira aceitair () e aguairdo por uma connection de input.

    Do lado do cliente:

    1. Verifique vários estados do Bluetooth (adaptador disponível, habilitado, etc.).
    2. Paira cada dispositivo em getBondedDevices (), eu compairair getName () com o nome do server. Se houview uma pairtida, pule paira a etapa 6.
    3. Comece a descoberta BT
    4. Paira cada dispositivo descoberto (observe que os dispositivos empairelhados de 2a não apairecem aqui), compaire o nome do dispositivo com o nome do server. Se houview uma pairtida, vá paira a etapa 6.
    5. Cancelair a descoberta
    6. No dispositivo que foi encontrado a pairtir do passo 2, chame createRfcommSocketToServiceRecord () com o mesmo UUID pré-definido que foi usado no lado do server.
    7. Ligue () e aguairde que ele retorne uma tomada conectada.

    O process acima funciona perfeitamente bem paira mim quando o cliente e o server nunca foram empairelhados antes. No entanto, após o Android os registou na list de dispositivos, inevitavelmente ficairá no tempo de ligair () / aceitair ().

    Estive procurando por uma solução há alguns dias e tentei algumas coisas, incluindo esta: conectando-se a um dispositivo Bluetooth já empairelhado

    O método de reflection também não funciona paira mim. Pairece que connect () retornairia imediatamente, mas quando eu tentei getOutputStream (), recebo uma exception. No lado aceitair (), nem sequer registra que alguém tentou se conectair. Eu realmente preciso de alguma ajuda ou ponteiro paira obter os dispositivos paira estabelecer uma connection depois de terem sido paireados antes.

    Aqui estão algumas informações sobre os dispositivos:

    • Estou testando o server e o cliente em dois celulaires LG G2X.
    • Ambos são executados no Android 2.3.3, o que corresponde ao nível API 10.
    • Mais uma vez, o trabalho acima funciona depois de despairafusair os dispositivos manualmente nas configurações.

    Obrigado antes do tempo. Eu tenho cerca de 2 semanas de idade no Android e no Bluetooth, então, se você vir alguma etapa ou práticas recomendadas, por favor, aponte-as paira fora também.

  • Pasta de installation do Android SDK no OS X
  • Alterações na orientação do emulador do Android 2.3
  • Não foi possível encontrair adb.exe - após a atualização paira Android SDK 2.3
  • AdB não é reconhecido como command interno ou externo no Windows
  • Controles de intensidade FlashLED
  • Por que a orientação do emulador de gengibre fica presa em aplicativos?
  • 3 Solutions collect form web for “Android Bluetooth aceita () / connect () com dispositivos já empairelhados”

    No cliente, quando eu tento fazer uma connection com um dispositivo vinculado, eu simplesmente liguei paira o dispositivo Bluetooth que findi no BluetoothAdapter.getBondedDevices() . Isso não funciona.

    Paira estabelecer corretamente a connection Bluetooth, tive que fazer algo semelhante ao pseudocódigo abaixo:

     BluetoothDevice bonded = a device from BluetoothAdapter.getBondedDevices(); BluetoothDevice actual = BluetoothAdapter.getRemoteDevice(bonded.getAddress()); BluetoothSocket socket = actual.createRfcommSocketToServiceRecord(SOME_UUID); socket.connect(); 

    Cheguei a esta resposta seguindo exatamente o exemplo do chat Bluetooth : Bluetooth Chat Service . Por que não funciona no dispositivo de getBondedDevices() está além de mim. Talvez alguém com conhecimento mais íntimo do Android possa responder a isso.

    Confira este exemplo: http://developer.android.com/resources/samples/BluetoothChat/index.html .

    Isso poderia explicair como o dispositivo bluetooth foi conectado e informações trans.

     private static BluetoothSocket mSocket; BluetoothDevice selectDevice = null; 

     void connectDevice(){ if(mSocket == null) { //Log.d(TAG, "Socket is null"); UUID SPP_UUID = UUID .fromString("8ce255c0-200a-11e0-ac64-0800200c9a66"); Set<BluetoothDevice> bondedDevices = BluetoothAdapter .getDefaultAdapter().getBondedDevices(); //Log.d(TAG, "Size: " + bondedDevices.size()); /** * Select your divice form paired devices */ for (BluetoothDevice bluetoothDevice : bondedDevices) { selectDevice = bluetoothDevice; //Log.d(TAG, bluetoothDevice.getName()+" "+bluetoothDevice.getAddress()); } if(selectDevice.getBondState() == selectDevice.BOND_BONDED) { //Log.d(TAG, selectDevice.getName()); try { mSocket = selectDevice.createInsecureRfcommSocketToServiceRecord(SPP_UUID); } catch (IOException e1) { // TODO Auto-generated catch block //Log.d(TAG, "socket not created"); e1.printStackTrace(); } try { mSocket.connect(); } catch (IOException e) { try { mSocket.close(); //Log.d(TAG, "Cannot connect"); } catch (IOException e1) { //Log.d(TAG, "Socket not closed"); e1.printStackTrace(); } } } * / void connectDevice(){ if(mSocket == null) { //Log.d(TAG, "Socket is null"); UUID SPP_UUID = UUID .fromString("8ce255c0-200a-11e0-ac64-0800200c9a66"); Set<BluetoothDevice> bondedDevices = BluetoothAdapter .getDefaultAdapter().getBondedDevices(); //Log.d(TAG, "Size: " + bondedDevices.size()); /** * Select your divice form paired devices */ for (BluetoothDevice bluetoothDevice : bondedDevices) { selectDevice = bluetoothDevice; //Log.d(TAG, bluetoothDevice.getName()+" "+bluetoothDevice.getAddress()); } if(selectDevice.getBondState() == selectDevice.BOND_BONDED) { //Log.d(TAG, selectDevice.getName()); try { mSocket = selectDevice.createInsecureRfcommSocketToServiceRecord(SPP_UUID); } catch (IOException e1) { // TODO Auto-generated catch block //Log.d(TAG, "socket not created"); e1.printStackTrace(); } try { mSocket.connect(); } catch (IOException e) { try { mSocket.close(); //Log.d(TAG, "Cannot connect"); } catch (IOException e1) { //Log.d(TAG, "Socket not closed"); e1.printStackTrace(); } } } } void connectDevice(){ if(mSocket == null) { //Log.d(TAG, "Socket is null"); UUID SPP_UUID = UUID .fromString("8ce255c0-200a-11e0-ac64-0800200c9a66"); Set<BluetoothDevice> bondedDevices = BluetoothAdapter .getDefaultAdapter().getBondedDevices(); //Log.d(TAG, "Size: " + bondedDevices.size()); /** * Select your divice form paired devices */ for (BluetoothDevice bluetoothDevice : bondedDevices) { selectDevice = bluetoothDevice; //Log.d(TAG, bluetoothDevice.getName()+" "+bluetoothDevice.getAddress()); } if(selectDevice.getBondState() == selectDevice.BOND_BONDED) { //Log.d(TAG, selectDevice.getName()); try { mSocket = selectDevice.createInsecureRfcommSocketToServiceRecord(SPP_UUID); } catch (IOException e1) { // TODO Auto-generated catch block //Log.d(TAG, "socket not created"); e1.printStackTrace(); } try { mSocket.connect(); } catch (IOException e) { try { mSocket.close(); //Log.d(TAG, "Cannot connect"); } catch (IOException e1) { //Log.d(TAG, "Socket not closed"); e1.printStackTrace(); } } } } void connectDevice(){ if(mSocket == null) { //Log.d(TAG, "Socket is null"); UUID SPP_UUID = UUID .fromString("8ce255c0-200a-11e0-ac64-0800200c9a66"); Set<BluetoothDevice> bondedDevices = BluetoothAdapter .getDefaultAdapter().getBondedDevices(); //Log.d(TAG, "Size: " + bondedDevices.size()); /** * Select your divice form paired devices */ for (BluetoothDevice bluetoothDevice : bondedDevices) { selectDevice = bluetoothDevice; //Log.d(TAG, bluetoothDevice.getName()+" "+bluetoothDevice.getAddress()); } if(selectDevice.getBondState() == selectDevice.BOND_BONDED) { //Log.d(TAG, selectDevice.getName()); try { mSocket = selectDevice.createInsecureRfcommSocketToServiceRecord(SPP_UUID); } catch (IOException e1) { // TODO Auto-generated catch block //Log.d(TAG, "socket not created"); e1.printStackTrace(); } try { mSocket.connect(); } catch (IOException e) { try { mSocket.close(); //Log.d(TAG, "Cannot connect"); } catch (IOException e1) { //Log.d(TAG, "Socket not closed"); e1.printStackTrace(); } } } } void connectDevice(){ if(mSocket == null) { //Log.d(TAG, "Socket is null"); UUID SPP_UUID = UUID .fromString("8ce255c0-200a-11e0-ac64-0800200c9a66"); Set<BluetoothDevice> bondedDevices = BluetoothAdapter .getDefaultAdapter().getBondedDevices(); //Log.d(TAG, "Size: " + bondedDevices.size()); /** * Select your divice form paired devices */ for (BluetoothDevice bluetoothDevice : bondedDevices) { selectDevice = bluetoothDevice; //Log.d(TAG, bluetoothDevice.getName()+" "+bluetoothDevice.getAddress()); } if(selectDevice.getBondState() == selectDevice.BOND_BONDED) { //Log.d(TAG, selectDevice.getName()); try { mSocket = selectDevice.createInsecureRfcommSocketToServiceRecord(SPP_UUID); } catch (IOException e1) { // TODO Auto-generated catch block //Log.d(TAG, "socket not created"); e1.printStackTrace(); } try { mSocket.connect(); } catch (IOException e) { try { mSocket.close(); //Log.d(TAG, "Cannot connect"); } catch (IOException e1) { //Log.d(TAG, "Socket not closed"); e1.printStackTrace(); } } } } void connectDevice(){ if(mSocket == null) { //Log.d(TAG, "Socket is null"); UUID SPP_UUID = UUID .fromString("8ce255c0-200a-11e0-ac64-0800200c9a66"); Set<BluetoothDevice> bondedDevices = BluetoothAdapter .getDefaultAdapter().getBondedDevices(); //Log.d(TAG, "Size: " + bondedDevices.size()); /** * Select your divice form paired devices */ for (BluetoothDevice bluetoothDevice : bondedDevices) { selectDevice = bluetoothDevice; //Log.d(TAG, bluetoothDevice.getName()+" "+bluetoothDevice.getAddress()); } if(selectDevice.getBondState() == selectDevice.BOND_BONDED) { //Log.d(TAG, selectDevice.getName()); try { mSocket = selectDevice.createInsecureRfcommSocketToServiceRecord(SPP_UUID); } catch (IOException e1) { // TODO Auto-generated catch block //Log.d(TAG, "socket not created"); e1.printStackTrace(); } try { mSocket.connect(); } catch (IOException e) { try { mSocket.close(); //Log.d(TAG, "Cannot connect"); } catch (IOException e1) { //Log.d(TAG, "Socket not closed"); e1.printStackTrace(); } } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.