¿Por qué necesito activar los servicios de ubicación para emparejar con un dispositivo Bluetooth?

Cada vez que intento conectar mi Samsung Galaxy S6 con Android 6.0.1 a un dispositivo con Bluetooth, me dice que habilite los "servicios de ubicación".

Cuando me quejé de esto, el proveedor de software respondió: "Las actualizaciones recientes de la API de Android de Google que afectan la tecnología Bluetooth LE requieren que se otorguen permisos de ubicación para usar la aplicación".

No veo la necesidad de esto.

Esta discusión habla de esto. La referencia técnica dice que las aplicaciones deben tener ciertos permisos , no que los servicios de ubicación estén activos.

Para acceder a los identificadores de hardware de dispositivos externos cercanos a través de escaneos de Wi-Fi y Bluetooth, su aplicación ahora debe tener los permisos ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION

Pregunta : ¿Significa esto que la declaración del proveedor de software es incorrecta?

El sistema de permisos definitivamente está completamente borrado con la reestructuración de MM (las explicaciones dicen que tenían "balizas Bluetooth" en mente que podrían usarse para ubicarlo). Según tengo entendido, su duda está justificada y la declaración del proveedor es incorrecta: las aplicaciones necesitan permiso para acceder a Bluetooth. Pero si necesitan un servicio de ubicación para encontrar el hardware ("girar a la derecha en la segunda junta de soldadura, pasar el transistor en la puerta 3..."), me sorprendería. Dudo mucho que los servicios de ubicación deban estar habilitados para eso, pero no tengo ningún dispositivo MM para verificar.
No puedo agregar una "respuesta", así que aquí está como un "comentario": ejecuto Android 11 en un Galaxy y tengo un reloj Huawei, pero probablemente sea el caso en general: parece que se requiere la ubicación para emparejar >> o conéctese sin emparejamiento<<, y la aplicación (Huawei Health) hace lo último, nunca se empareja (en el nivel de Bluetooth), por lo que se requiere la ubicación cada vez. Para solucionarlo: revoque el permiso de ubicación de la aplicación y active y desactive el bluetooth para desconectarse; instale "NRF Connect" desde Play Store, inícielo, habilite la ubicación, busque su dispositivo en la lista, toque tres puntos y luego "vincule". Ahora se conecta sin ubicación.
[continuación del comentario anterior] La aplicación (Huawei Health) sigue quejándose de que requiere ubicación, pero se conecta y funciona de todos modos cuando la ubicación está deshabilitada. El efecto secundario es que el ícono de bluetooth permanece en la barra de estado y el reloj aparece en la lista de dispositivos bluetooth en la configuración de Android, lo que no sucede cuando se conecta a través de la aplicación sin vincular. Normalmente veo ese ícono solo cuando conecto los auriculares BT, así que estoy un poco molesto porque ya no indica eso.

Respuestas (6)

Mi entendimiento de Bluetooth es que las aplicaciones que usan Bluetooth tienen acceso directo a la dirección MAC del dispositivo con el fin de emparejar. Asumiré esto para esta respuesta.

Si puede leer las direcciones MAC de los transmisores WiFi o Bluetooth, puede localizar un dispositivo. Así es como funciona la ubicación WiFi/Bluetooth; usted escucha las direcciones MAC de los transmisores y las busca en una base de datos global gigante.

Por lo tanto, cualquier aplicación que use Bluetooth y una conexión de datos es teóricamente capaz de localizar su dispositivo. No estoy seguro de que esto sea posible en la práctica; Bluetooth no tiene el mismo alcance ni la misma infraestructura de punto de acceso semipermanente que Wi-Fi.

Al solicitar los servicios de ubicación para acceder a Bluetooth, se asegura de que el usuario comprenda que la información de su ubicación puede filtrarse cuando usa Bluetooth. En versiones de Android anteriores a Marshmallow, el usuario podía usar Bluetooth sin los servicios de ubicación habilitados, pero la información de ubicación podía filtrarse. En estas versiones anteriores, también podía ejecutar escaneos WiFi para encontrar direcciones MAC sin los servicios de ubicación habilitados, lo que nuevamente significaba que la información de su ubicación podría filtrarse. El requisito para permitir que los servicios de ubicación usen Bluetooth se trata de garantizar que alguien que deshabilite la ubicación mantenga su ubicación privada.

Caracterizaría este problema como un problema de diseño y no como un error. Presumiblemente, se puede corregir un error, pero no me queda claro si puede usar Bluetooth sin perder información de ubicación. Bluetooth se creó antes de que nadie considerara los servicios de ubicación WiFi y Bluetooth.

¿Cómo evita Apple este requisito?
Además, si esto está relacionado con MAC, ¿por qué puedo tener Wifi activado y Bluetooth desactivado?
Esto suena más como una falla fatal al combinar un servicio que brinda acceso directo a esa información con la posibilidad teórica de que la información provista por ese servicio pueda estar disponible. Supongo que deshabilitar los servicios de ubicación no deshabilita los cuadros de texto con la etiqueta "¿dónde estás?" por lo tanto, deshabilitar bluetooth solo logra una versión a medias de la intención del diseño. Utiliza una solicitud de activación/desactivación del usuario para simplemente reducir la superficie de ataque de las aplicaciones antagónicas que intentan inferir la ubicación sin permiso, sin eliminarlo todo.
Todavía hay una diferencia entre el "Permiso de ubicación" (el usuario acepta que la aplicación puede acceder a la ubicación, a través de la dirección MAC del dispositivo Bluetooth) y los "Servicios de ubicación" (el usuario acepta que cualquier tecnología - GPS, WiFi, Bluetooth, LTE... - se puede utilizar para determinar la ubicación del dispositivo Android mediante cualquier aplicación). Lo primero solo significa que su ubicación puede ser revelada porque uno puede saber dónde está el dispositivo Bluetooth, lo último significa literalmente que el dispositivo Android puede usar el GPS para determinar dónde se encuentra un dispositivo Bluetooth.

El proveedor tiene razón, debe habilitar los servicios de ubicación para buscar dispositivos WiFi o Bluetooth LE.

Vea el error #185370 para más detalles. Google dijo que lo arreglaron en una 'versión futura', pero según los comentarios sobre el error, todavía no está arreglado en Android 7.


Editar: anteriormente dije que los servicios de ubicación solo son necesarios cuando la aplicación que inicia el escaneo se ejecuta en segundo plano. El código fuente indica que esto solo es cierto si el API-Target es <Android M.

Si se trata de un error de Android, ¿por qué tendría razón el proveedor? Deberían haber respondido: "Es un error de Android"
¿Es posible vincular el dispositivo a bluetooth fuera de la aplicación?
Usted preguntó si la declaración del proveedor es incorrecta. No es incorrecto, debe otorgar permisos de ubicación a la aplicación. Además, debido al error, debe habilitar los servicios de ubicación .
Es exactamente como escribe @jomo. Y Google definitivamente es aquí el culpable... Afortunadamente, las cosas parecen moverse de manera positiva después de 5 años.

El OP preguntó sobre el emparejamiento (el método Bluetooth original y seguro para la privacidad para definir una nueva relación confiable al confirmar un código enviado desde el otro dispositivo). Para el emparejamiento, una aplicación NO necesita:

  1. Buscar una dirección MAC
  2. "Servicios de localización"
  3. ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION (no estoy 100 % seguro de esto)

Creo que el error #185370 no está relacionado. No hay error; hay vendedores deshonestos.

Una dirección MAC tiene una identificación de fabricante y una identificación de dispositivo, y generalmente un número de modelo. Android 6.0 castró una función que anteriormente permitía que la aplicación de un fabricante buscara direcciones MAC para vincularlas a sus propios productos, para ahorrarle el problema del emparejamiento y otras cosas divertidas.

Sin embargo, muchas aplicaciones abusaron de él para encontrar todos los productos WiFi y Bluetooth en su hogar, qué automóvil conduce, sus proveedores de datos, etc., y averiguar dónde trabaja, qué tienen sus amigos o quiénes son, con qué frecuencia visita, a qué tiendas vas, etc. (piensa en marketing, intromisión en las elecciones y juegos "gratuitos" de otros países).

De Google: "Para proporcionar a los usuarios una mayor protección de datos, a partir de esta versión, Android elimina el acceso programático al identificador de hardware local del dispositivo para las aplicaciones que utilizan las API de Wi-Fi y Bluetooth. WifiInfo.getMacAddress() y theBluetoothAdapter.getAddress() los métodos ahora devuelven un valor constante de 02:00:00:00:00:00".

Nuevamente, los servicios de ubicación no son necesarios para "Emparejar". Esto es de mi nuevo escáner de código de vehículo Bluetooth "BlueDriver" ODBII (es decir, luz de control del motor):

Location Services
BlueDriver can use the Bluetooth Location service to scan for
nearby BlueDriver sensors. Instead, if you wish, you can pair
a sensor in the Bluetooth settings of your phone.

(A primera vista de su Declaración de privacidad me asusté: cargarán en sus servidores, el VIN (incluye mfr, modelo, ID, etc.) de cada automóvil al que servicio, además de todos los datos del automóvil con hábitos de manejo, etc.; No puedo optar por no recibir ADS en mi correo electrónico. Luego lo leí hasta el final. Descubrí que tienen políticas muy estrictas sobre mantenerlo privado y NO compartirlo. ¡Muy inusual!)

Los servicios de ubicación pueden ser legítimos. La aplicación Fitbit no la necesita para conectarse a mi Fitbit, pero puede ayudarlos a recopilar todos los datos que quieren de mí. Y créanme, es mucho más de lo que necesitan para verificar mi frecuencia cardíaca y contar mis pasos, y el mapeo es opcional.

Necesitaré agregar mis dos centavos a esto: ser un desarrollador de aplicaciones que necesita buscar dispositivos de salud Bluetooth LE. También necesito hacer esto en segundo plano para que la aplicación pueda volver a conectarse al dispositivo sin que el usuario tenga que interactuar con la aplicación.

El hecho de que Android requiera una ubicación FINE y permisos en segundo plano para hacer esto en la última versión ha demostrado ser un gran dolor de cabeza. Los idiotas rechazan mi aplicación debido a esto, pero la aplicación no necesita información de ubicación ni se preocupa por la ubicación. La aplicación también filtra los escaneos para asegurarse de que solo expone los dispositivos de salud que puede admitir (hay muchos dispositivos patentados).

Puedo descubrir en segundo plano SPP y HDP (el Android anterior a 10 eliminó HDP en la versión 10) sin estos permisos. Trabajar con Bluetooth es bastante difícil para muchas personas, especialmente para los ancianos que no son particularmente expertos en tecnología. Android está haciendo que el uso de su plataforma sea cada vez más imposible de usar en situaciones remotas de monitoreo de pacientes.

Así que mi respuesta a la pregunta original. El desarrollador de la aplicación no está "mintiendo". ¡Android forzó esto!

Sí, esto es un gran dolor de cabeza. Pero el problema es que Google recopila el SSID WiFi de todos, ahora se pueden usar para determinar la ubicación exacta. Google malo. Malo.
No estoy buscando WiFi; Estoy buscando dispositivos de salud Bluetooth Low Energy. No necesito información de ubicación para hacer esta tarea. La búsqueda de dispositivos BTLE implica escuchar anuncios de dispositivos conectables. En esos anuncios puede haber UUID de servicio que indiquen lo que admite el dispositivo. Si el UUID es compatible con un servicio de dispositivo de salud con el que puede funcionar mi aplicación, paso esa información al usuario y le pregunto si desea conectarse. Si es así, me conecto. No hay ubicación involucrada. Pero Google requiere permiso de ubicación para ese escaneo. ¿¿¿Por qué???
Primero, mis disculpas. No tengo idea de cómo llegué a escribir sobre WiFi, cuando claramente escribiste "Bluetooth LE". Lo siento por eso. Sí, acepto que es inapropiado que Google solicite este permiso. Lo único en lo que puedo pensar (sin defender a Google, de ninguna manera) es que Bluetooth LE no usa las mismas API que Bluetooth. Si es así, bueno, técnicamente, Bluetooth (no tanto Bluetooth LE) puede usarse para proporcionar una buena ubicación en circunstancias muy determinadas . En todos esos casos, alguien tendría que saber la ubicación exacta del dispositivo Bluetooth. Continuado...
Lo que considero un problema mayor para Bluetooth es que creo que es posible identificar de manera más o menos única a una persona que usa las API de Bluetooth de Android. Y AFAIK, Google no tiene permisos para especificar, "esta aplicación puede identificarte". Para mejorar el mundo para los desarrolladores y los consumidores, Google podría (y debería, en mi humilde opinión) proporcionar una API limitada adicional para Bluetooth que nunca proporcionará datos que puedan usarse con fines de identificación. Eso probablemente sería suficiente para la mayoría de las aplicaciones, sin implicaciones de privacidad para los usuarios (y problemas problemáticos como el que está experimentando para los desarrolladores).
La restricción genérica del contenido de una comunicación Bluetooth anularía su propósito. Es agnóstico al contenido. Puedo entender exigir que una aplicación indique si lo hace. Mi aplicación no expone ni utiliza información de ubicación. Solo funciona con compañeros a los que entiende. Esos compañeros siguen estándares. ¡Si no lo hacen, no funcionará! ¿Por qué solicitar permiso de ubicación? También uso SPP Bluetooth para el mismo propósito. ¡No hay permiso de ubicación para eso!
Definitivamente estoy de acuerdo en que cualquier cosa que no se pueda usar para determinar la ubicación no debe emitir ninguna solicitud de permiso para la ubicación. Estoy pensando que es un error (o pereza) de Google, o alguien ha descubierto cómo usar esa API para determinar la ubicación. Quizás lo publique como un error en el sitio de desarrollo de Android y vea qué tipo de respuesta recibe. Por favor, informe de lo que aprende!
Supongo que uno podría usar el escáner (o cualquier otro medio para descubrir dispositivos Bluetooth, incluido el clásico) para obtener la ubicación si tuviera dispositivos que funcionaran en secreto para hacerlo. Dado el corto alcance de Bluetooth, parece doloroso hacerlo. Sin embargo, he declarado específicamente que la aplicación solo usa BluetoothLeScanner para buscar dispositivos de salud personales (ese es su propósito) y no uso ni expongo información de ubicación. Google sigue rechazando la aplicación. Estoy perdido y frustrado.
Ciertamente puedo decir que estás frustrado. Lamento que estés pasando por esto. Lo siento por ti. Aunque su aplicación no usa ni expone información de ubicación, Google y el sistema operativo Android no son lo suficientemente inteligentes como para saberlo. La pregunta es: ¿podría una aplicación hacer esto usando las API que activan la advertencia?

Para realizar una conexión Bluetooth, la dependencia de la ubicación se puede relacionar de la siguiente manera:

Si una aplicación puede buscar balizas Bluetooth conocidas, también puede averiguar la ubicación a partir de la baliza disponible. Entonces, si una aplicación obtiene acceso para usar Bluetooth en su teléfono, es probable que también pueda recuperar su ubicación. Por lo tanto, tiene sentido que una aplicación solicite acceso a la ubicación cuando intenta buscar dispositivos Bluetooth.

Entonces, la dependencia de la ubicación para Bluetooth se agrega en Android 6 (Marshmallow) en adelante. Además, en la versión reciente de Android (10 en adelante), han restringido aún más el uso de la ubicación en función de si está utilizando la aplicación (acceso en primer plano) o si su aplicación se ejecuta en segundo plano.

Una nota más es: esta dependencia de la ubicación y el permiso relacionado no es específica de Android, sino que también se agrega en iOS.

Hay muchos usos nefastos que uno puede soñar. Dado el corto alcance de Bluetooth, se necesitarían muchas balizas para rastrear su posición. Dicho esto, uno podría hacer lo mismo con Bluetooth estándar si tuviera un par diseñado correctamente. Pero no hay permisos de ubicación para eso.
Con BLE. la ubicación puede ser inferida por buenos y malos actores. También la ubicación se puede derivar de una dirección IP (excl VPN) Estoy confundido en el mundo de la seguridad. Se supone que el cifrado es nuestro salvador, pero la ubicación, las cookies y el historial del navegador hacen un buen trabajo al rastrear nuestros comportamientos. ¿Por qué Google "pretende" ser seguro, mientras que al mismo tiempo usa cookies y guarda nuestro historial de búsqueda? Me parece que quieren ser los custodios de esta información para su propio beneficio, mientras evitan que otros obtengan información bajo el pretexto de "seguridad"... ¿seguridad de quién?

El permiso de ubicación y los servicios de ubicación deben ser dos cosas separadas. Si acepto, esta aplicación puede usar wifi de datos de ubicación de baja precisión, etc. VS, esta aplicación usa o requiere que el gps del teléfono esté habilitado.

Ejemplo: mantengo el gps en mi teléfono apagado, pero no puedo sincronizar mi fitbit porque dicen que no solo necesito dar permiso de ubicación a la aplicación, el gps del teléfono también tiene que estar encendido.