Bien aquí está el trato. Tengo dos teléfonos Galaxy Nexus con Bluetooth habilitado.Android Bluetooth IOException: conexión rechazada
He escrito una aplicación de administración de conexión bluetooth que uso para descubrimiento de dispositivos y conectividad. También emite todos los UUID disponibles que los dispositivos pueden admitir.
Buscando desde http://www.bluetooth.org/Technical/AssignedNumbers/service_discovery.htm los siguientes UUID estándar están expuestos desde dispositivos Galaxy Nexus.
- 0x1116 - NAP
- 0x112f - PBAP (acceso al directorio telefónico Perfil)
- 0x111f - HFP (manos libres)
- 0x1105 - OPP (Object Push Profile)
- 0x1112 - HSP (Headset Profile)
- 0x110c - AVRCP
- 0x110a - A2DP
Estoy intentando conectarme a través del perfil OPP (UUID 00001105-0000-1000-8000-00805F9B34FB
) y empujar objetos (archivos) entre los dispositivos. He recorrido toda la Android API documentation sobre cómo descubrir, vincular/vincular (enhebrar etc.) y administrar todas las conexiones bluetooth. Logré conectarme exitosamente y hablar con un dispositivo de placa heredado a través del perfil SPP (0x1101).
Sin embargo, cuando trato de usar socket.connect()
entre los dos teléfonos galaxy nexus, aparece el cuadro de diálogo de emparejamiento y hago clic en el botón Pair
en ambos dispositivos. Después de eso, inmediatamente obtengo un Connection Refused IOException
. Tenga en cuenta que, una vez que se ha producido el emparejamiento, nunca se me vuelve a preguntar cuál tiene sentido, ya que el enlace seguro está en la memoria caché.
Si no puedo conectarme a estos perfiles estándar utilizando estos UUID estándar ¿por qué están expuestos? ¿Cómo puedo conectarme desde mi aplicación a cualquiera de estos perfiles e interactuar con ellos? ¿Es porque mi aplicación no es de alguna manera confiable? Lo que es extraño es que incluso la funcionalidad Share
en Android tampoco funciona. ¿Esto está completamente roto en Android?
Por favor, evite darme pistas para usar el "UUID SPP conocido 0x1101" como dicen los documentos. Esto no es lo que quiero. Tengo una comprensión bastante buena de cómo funciona esto y estoy buscando una solución real o una explicación del problema.
He visto la típica solución de "reflexión" pero no entiendo por qué sigue siendo un problema en Android? ¿Por qué la gente usa la reflexión para hacer que esto funcione? ¿Podemos presentar un error en Android para arreglar esto?
Si esos UUID son estándar, cualquier aplicación debería ser capaz de conectarse e interactuar con ellos. ¿Por qué es esto un problema y por qué recibo esta excepción?
Gracias de antemano.
ACTUALIZACIÓN
Así que por alguna razón la carga de objetos en el sistema Android comenzó a trabajar. De hecho, intenté conectarme a través de mi aplicación y no funcionaba. Luego, fui a la aplicación Contactos e intenté compartir un contacto que funcionó mágicamente. Luego, volví a mi aplicación y ahora funciona ... wow. Eso es muy extraño y debe haber una explicación para esto.
¿configura los permisos correctos? http://developer.android.com/guide/topics/connectivity/bluetooth.html#Permissions – Lars
@Lars Por supuesto que sí. dnkoutso: ¿Cómo estás abriendo exactamente el zócalo? ¿Podría intentar volver a emparejar, es decir, desvincular y volver a vincular? Por cierto, ¿es de 2 niveles? – nullpotent
@icethedral, ¿qué quieres decir con 2 niveles? A menudo voy a la aplicación de configuración real en ambos dispositivos y elimino el emparejamiento. Una vez que llamo a 'socket.connect()' otra vez, me aparece el cuadro de diálogo de emparejamiento y el número de clave de paso ingresado. Desafortunadamente, justo después de obtener la IOException "Conexión rechazada". – dnkoutso