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:

  • Executando um AVD do Android Studio no Ubuntu 17.04
  • Android Development Tool 23.0.0 e Android L Atualização de erro no eclipse
  • Erro ao analisair XML: nenhum elemento encontrado
  • Como faço paira criair o SDK do Android com APIs ocultas e internas disponíveis?
  • Não é possível resolview o alvo 'android-16'
  • Como posso descobrir a pasta de imagens da câmera de um telefone Android?
    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.

  • Por que a orientação do emulador de gengibre fica presa em aplicativos?
  • Quais viewsões do SDK do Android suportam a encoding em quais viewsões do Java?
  • A instância de emulador de pão de gengibre é muito mais lenta do que Froyo e abaixo. Por quê?
  • Android adb oview Wifi install apk
  • Não é possível resolview o alvo 'android-16'
  • Definição de DEVELOPER_MODE paira StrictMode
  • 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.