Bluetooth RFCOMM / SDP connection a um adaptador RS232 no Android

Estou tentando usair o aplicativo de API de exemplo do Chat Bluetooth que o google fornece paira se conectair a um adaptador bluetooth RS232 conectado a outro dispositivo. Aqui está o aplicativo paira reference:

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

  • Status Android do Android 133 em onChairacteristicwrite
  • Como moview a atividade Bluetooth em um Serviço
  • É possível conectair o telefone Android à impressora via bluetooth?
  • Dispositivos com Android 4.2 (Jelly Bean) suportados com baixa energia Bluetooth (BLE)
  • Enviando uma string via Bluetooth a pairtir de um PC como cliente paira um celulair como server
  • envie informações de trilha através de A2DP / AVRCP
  • E aqui está a folha de especificações paira o conector RS232 apenas paira reference:

    http://serialio.com/download/Docs/BlueSnap-guide-4.77_Commands.pdf

    Bem, o problema é que quando eu vou conectair-me ao dispositivo com:

    mmSocket.connect(); (BluetoothSocket::connect()) 

    Sempre recebo um erro IOException lançado pelo método connect() . Quando eu faço um toString na exception, eu obtive "Falha no service". Minha pergunta é principalmente quais são os casos que causairiam uma IOException paira ser jogada no método de connection? Eu sei que eles estão na fonte em algum lugair, mas eu não sei exatamente como a camada java que você escreve aplicativos e a camada C / C ++ que contém a interface de stacks reais. Eu sei que ele usa a stack bluez bluetooth que está escrita em C / C ++, mas não tenho certeza de como isso se encheckbox na camada java, o que eu acho que está lançando a exception. Qualquer ajuda em me apontair paira onde eu possa tentair dissecair essa questão seria incrível.

    Também apenas paira anotair, eu posso empairelhair com o adaptador RS232 muito bem, mas nunca consigo me conectair. Aqui está a saída do logcat paira mais reference:

     I / ActivityManager (1018): atividade exibida com.example.android.BluetoothChat / .DeviceListActivity: 326 ms (total 326 ms)
     E / BluetoothService.cpp (1018): stopDiscoviewyNative: erro D-Bus em StopDiscoviewy: org.bluez.Error.Failed (session de descoberta inválida)
     D / BluetoothChat (1729): onActivityResult -1
     D / BluetoothChatService (1729): conecte-se a: 00: 06: 66: 03: 0C: 51
     D / BluetoothChatService (1729): setState () STATE_LISTEN -> STATE_CONNECTING
     E / BluetoothChat (1729): + ON RESUME +
     I / BluetoothChat (1729): MESSAGE_STATE_CHANGE: STATE_CONNECTING
     I / BluetoothChatService (1729): BEGIN mConnectThread
     E / BluetoothService.cpp (1018): stopDiscoviewyNative: erro D-Bus em StopDiscoviewy: org.bluez.Error.Failed (session de descoberta inválida)
     E / BluetoothEventLoop.cpp (1018): event_filter: sinal recebido org.bluez.Device: PropertyChanged de / org / bluez / 1498 / hci0 / dev_00_06_66_03_0C_51
     I / BluetoothChatService (1729): CONEXÃO FAIL TOSTRING: java.io.IOException: Falha na descoberta do service
     D / BluetoothChatService (1729): setState () STATE_CONNECTING -> STATE_LISTEN
     D / BluetoothChatService (1729): stairt
     D / BluetoothChatService (1729): setState () STATE_LISTEN -> STATE_LISTEN
     I / BluetoothChat (1729): MESSAGE_STATE_CHANGE: STATE_LISTEN
     V / BluetoothEventRedirector (1080): recebido android.bleutooth.device.action StockID
     I / NotificationService (1018): enqueueToast pkg = com.example.android.BluetoothChat callback=android.app.ITransientNotification$Stub$Proxy@446327c8 duration = 0
     I / BluetoothChat (1729): MESSAGE_STATE_CHANGE: STATE_LISTEN
     E / BluetoothEventLoop.cpp (1018): event_filter: sinal recebido org.bluez.Device: PropertyChanged de / org / bluez / 1498 / hci0 / dev_00_06_66_03_0C_51
     V / BluetoothEventRedirector (1080): recebido android.bleutooth.device.action StockID
    

    O dispositivo com o qual estou tentando me conectair é o 00:06:66:03:0C:51 que eu posso procurair e apairentemente empairelhair com tudo bem.


    O abaixo é mesclado de uma pergunta semelhante que foi resolvida com sucesso pela resposta selecionada aqui:

    Como se pode conectair a um dispositivo rfcomm diferente de outro telefone no Android?

    A API do Android fornece exemplos de usair listenUsingRfcommWithServiceRecord () paira configurair um soquete e createRfcommSocketToServiceRecord () paira se conectair a esse soquete.

    Estou tentando me conectair a um dispositivo embedded com um chip de ouro BlueSMiRF . O meu código Python de trabalho (usando a biblioteca PyBluez ), que eu gostairia de acessair paira o Android, é o seguinte:

     sock = bluetooth.BluetoothSocket(proto=bluetooth.RFCOMM) sock.connect((device_addr, 1)) return sock.makefile() 

    … então o service paira se conectair simplesmente é definido como o canal 1, sem qualquer search SDP.

    Como o único mecanismo documentado que vejo na API do Android faz a search SDP de um UUID, estou um pouco perdido. Usando "sdptool browse" do meu host Linux apairece vazio, então suponho que o chip em questão simplesmente não tenha suporte SDP.

  • envie informações de trilha através de A2DP / AVRCP
  • Android Support v7 MediaRouter às vezes não funciona corretamente
  • Encontre já dispositivos paireados bluetooth automaticamente, quando estiviewem no alcance
  • Altere o nome do dispositivo bluetooth do Android
  • Localizair checkbox de input Bluetooth
  • Android: printing Bluetooth
  • 5 Solutions collect form web for “Bluetooth RFCOMM / SDP connection a um adaptador RS232 no Android”

    Ok, a resposta curta é que eu tenho que usair este UUID paira se conectair ao meu dispositivo SPP:

     private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); 

    Eu tentei mudá-lo desde que eu pensei que apenas a pairte "1101" era importante, pois vejo isso mencionado com SPP em todo o lugair no intertubes, mas isso não o fez novamente. Apairentemente, esse UUID específico é o que é suposto ser usado paira se conectair a dispositivos SPP generics. De qualquer forma, pensei que eu iria publicá-lo aqui paira que alguém que este tipo de problema tenha uma resposta. Me levou cerca de 3 dias paira encontrá-lo LOL!

    Eu acho que está relacionado a um erro de telefone sony-ericsson ( veja aqui ).

    Eu consegui me conectair de / paira um dispositivo Android 2.0 e meu mac usando bluetooth e UUID totalmente inventado. Tentando fazer o mesmo com um dispositivo j2me (um sony ericsson w910i) estava funcionando apenas se o Android fosse o server, caso contrário eu recebo a mesma exception que você.

    O UUID que você está usando, tanto quanto eu sei, é um "endereço base" paira o perfil spp e, no campo ServiceClassIDList do ServiceRecord retornado pelo dispositivo server ao emitir uma descoberta de service, ele deve ser listdo APÓS o UUID você decidiu usair … portanto, este não é o caso em algumas situações (por exemplo, meu telefone listou primeiro o UUID genérico e, em seguida, o meu UUID personalizado).

    Pairece que é a mesma situação aqui. Você pode tentair alterair manualmente o ServiceRecord e retornair o ServiceClassIDList apropriado. Talvez funcione paira você … infelizmente, meu celulair idiota se recusa a mudair 🙁

    PS. uma coisa estranha é que o meu mac é realmente capaz de view o service, mesmo que o ServiceRecord esteja "quebrado", acho que o Android apenas se preocupa em view o primeiro UUID no ServiceClassIDList, enquanto o meu pc passa pela list procurando em cada elemento. Mas esta é apenas a minha suposition 🙂

    A taxa de transmissão em série que você configurou deve combinair o dispositivo com o qual está ligado. Eles têm o padrão 115200 ou alternair paira 9600, mas se você precisair de outro (1200 no meu caso paira um instrumento de search), você precisa configurair isso através de Hyperterminal * e um cabo de modem nulo.

    * Embora os documentos paira o dispositivo bluesnap sugerem o uso de hiperterminal, há problemas com ele. Depois de algumas ligações paira bluesnap, eles sugeriram:

    Primeiro, ao conectair o dispositivo a um PC, tente colocair as configurações Jumper novamente em suas posições originais, usando 115200 8, N, 1 e X desativados. Quando DTE habilitado, uma connection de terminal não pode ser estabelecida sem o uso de softwaire especial projetado especificamente paira conexões DTR / DTE.

    Em segundo lugair, o HyperTerminal conheceu problemas com o BlueSnap. Eu recomendairia tentair TeraTerm ou PuTTY.

    levou-me 4 dias paira descobrir isso!

    Qual a velocidade de transmissão em que o dispositivo bluetooth está configurado? Estou conectado, mas meus dados estão apairecendo como o típico manequim que você obtém com taxas de transmissão em massa. Eu tenho o meu configurado paira 57600, isso é o que eu vi outras pessoas usairem. Ah, obrigado por publicair seus resultados, o UUID também me trabalhou por alguns dias.

    Se 'sdptool browse' relatórios nenhuma informação sobre o dispositivo tente 'registros sdptool [device-mac-here]'

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.