
tente de détecter les lunettes intelligentes à proximité et de vous avertir
tente de détecter les lunettes intelligentes à proximité et de vous avertir.
L'application, nommée Nearby Glasses, a un seul but : rechercher les lunettes intelligentes à proximité et vous avertir.
Cette application vous avertit lorsque des lunettes intelligentes sont à proximité. Elle utilise les identifiants d'entreprise présents dans les données Bluetooth émises par celles-ci. Par conséquent, de faux positifs sont probables (par exemple, à partir de casques VR). Veuillez donc faire preuve de prudence lorsque vous approchez une personne à proximité portant des lunettes. Il pourrait s'agir de simples lunettes, malgré l'avertissement de cette application.
L'auteur de l'application, Yves Jeanrenaud, décline toute responsabilité quant à cette application et à son fonctionnement. Utilisation à vos propres risques. Par conception technique, la détection des appareils Bluetooth LE peut parfois simplement ne pas fonctionner comme prévu. Je ne suis pas un développeur diplômé. Tout cela est écrit sur mon temps libre et avec les connaissances que je me suis enseignées moi-même.
Les faux positifs sont probables. Cela signifie que l'application Nearby Glasses peut vous avertir de la présence de lunettes intelligentes à proximité alors qu'il pourrait en réalité s'agir d'un casque VR du même fabricant ou d'un autre produit de cette marque. Elle peut également manquer des lunettes intelligentes à proximité. Encore une fois : je ne suis pas un développeur professionnel.
Cependant, cette application est gratuite et open source, vous pouvez examiner le code, le modifier et le réutiliser (sous la licence).
L'application Nearby Glasses ne stocke aucun détail vous concernant et ne collecte aucune information sur vous ou votre téléphone. Pas de télémétrie, pas de publicités, ni aucune autre nuisance. Si vous installez l'application via le Play Store, Google peut en savoir un peu sur vous et collecter certaines statistiques. Mais l'application elle-même ne le fait pas.
Si vous choisissez de stocker (exporter) le fichier journal, cela relève entièrement de votre décision et de votre responsabilité quant à la destination de ces données. Les journaux sont enregistrés uniquement localement et ne sont pas automatiquement partagés avec qui que ce soit. Ils contiennent peu de données sensibles ; en fait, uniquement les codes d'identification du fabricant des appareils BLE rencontrés.
À utiliser avec une extrême prudence ! Comme indiqué précédemment : il n'y a aucune garantie que les lunettes intelligentes détectées soient réellement à proximité. Il pourrait s'agir d'un autre appareil techniquement similaire (au niveau des annonces BLE) aux lunettes intelligentes.
Veuillez ne pas agir de manière impulsive. Réfléchissez avant d'agir sur la base de tout message (pas seulement de cette application).
Flags: 02 01 06 Flags: LE General Discoverable Mode, BR/EDR Not Supported
Manufacturer Specific Data: Length: 0x1A Type: Manufacturer Specific Data (0xFF) Company ID: 0x058E (Meta Platforms Technologies, LLC) Data: 4D 45 54 41 5F 52 42 5F 47 4C 41 53 53
Service UUIDs: Complete List of 16-bit Service UUIDs 0xFEAA
- Selon le [référentiel des numéros attribués du Bluetooth SIG](https://github.com/yjeanrenaud/yj_nearbyglasses/blob/main/www.bluetooth.com/specifications/assigned-numbers), nous pouvons utiliser ces identifiants d'entreprise :
- `0x01AB` pour `Meta Platforms, Inc. (anciennement Facebook)`
- `0x058E` pour `Meta Platforms Technologies, LLC`
- `0x0D53` pour `Luxottica Group S.p.A` (qui fabrique les Meta Ray-Bans)
- `0x03C2` pour `Snapchat, Inc.` (qui fabrique les SNAP Spectacles)
- `0x05D6` pour `Zhuhai Jieli Technology Co` (qui fabrique les Rogbird VisionPro et Rollme VistaView)
Ils sont **immuables et obligatoires**. Bien sûr, Meta et d'autres fabricants ont également d'autres produits dotés du Bluetooth et donc de leur identifiant, par exemple les casques VR. Par conséquent, l'utilisation de ces codes d'identifiant d'entreprise pour le processus de numérisation de l'application est sujette à de faux positifs. Mais si vous ne voyez personne porter un Occulus Rift autour de vous et qu'il n'y a pas de bâtiments où ils pourraient se cacher, il y a de fortes chances qu'il s'agisse plutôt de lunettes intelligentes.
- Lors de l'appairage, les lunettes intelligentes émettent généralement leur nom de produit, nous pouvons donc également rechercher cela. Mais il est rare que nous voyions cela sur le terrain. Les personnes ayant l'intention d'utiliser des lunettes intelligentes dans les bars, les pubs, dans la rue et ailleurs se préparent généralement à l'avance.
- Lorsque l'application reconnaît un appareil Bluetooth Low Energy (BLE) avec une intensité de signal suffisante (voir RSSI ci-dessous), elle envoie un message d'alerte. Cela doit vous aider à agir en conséquence.
- De plus, nous recherchons les noms d'appareils diffusés, par exemple `rayban`, `ray-ban` ou `HeyCyan`. `HeyCyan` est [un SDK célèbre pour les lunettes intelligentes de diverses marques](https://github.com/ebowwa/HeyCyanSmartGlassesSDK). Parmi ces appareils *HeyCyan*, vous pouvez également trouver les lunettes intelligentes Nilox Smart AI Glasses vendues par ALDI et Hofer (en Autriche). Pour renforcer cela, nous recherchons également le `primary_UUID`, un identifiant de service fixé au côté logiciel de ces lunettes (`7905FFF0-B5CE-4E99-A40F-4B1E122D00D0`). Bien que cela puisse changer à l'avenir, c'est peu probable car cela rendrait les appareils plus anciens inutilisables, nous pourrions donc simplement ajouter plus d'UUID à la routine de numérisation à ce moment-là.
## Fonctionnalités
- L'application *Nearby Glasses* affiche une notification lorsque des lunettes intelligentes sont à proximité (c'est-à-dire un appareil BLE de l'un de ces identifiants d'entreprise mentionnés ci-dessus)
- **À proximité** signifie que le RSSI (intensité du signal) est inférieur ou égal à une valeur donnée : -75 dBm par défaut. Cette valeur par défaut correspond à une distance moyenne et à un signal correct.
### Qu'est-ce que le RSSI ?
- Laissez-moi expliquer un peu cette valeur RSSI :<br/>
RSSI est l'abréviation de Received Signal Strength Indication (indication de l'intensité du signal reçu). La valeur est une indication de l'intensité du champ de réception des applications de communication sans fil. [Wikipedia a un assez bon article](https://en.wikipedia.org/wiki/Received_signal_strength_indicator) à ce sujet.
En bref, le RSSI dépend principalement de :<br/>
- La puissance d'émission de l'appareil
- La conception de l'antenne
- Les murs et les obstacles
- Les corps humains qui absorbent le signal
- La réflexion et les interférences
- L'orientation de l'appareil<br/>
Mais dans les scénarios BLE (Bluetooth Low Energy) typiques, la distance approximative du RSSI (espace ouvert) est : <br/>
- -60 dBm ~ 1 – 3 m<br/>
- -70 dBm ~ 3 – 10 m<br/>
- -80 dBm ~ 10 – 20 m<br/>
- -90 dBm ~ 20 – 40 m<br/>
- -100 dBm ~ 30 – 100+ m ou presque perte de signal<br/>
À l'intérieur, les distances sont souvent beaucoup plus courtes.<br/>
Le RSSI diminue approximativement selon<br/>
`RSSI ≈ -10 * n * log10(distance) + constante`<br/>
- Par conséquent, le seuil RSSI par défaut de -75 dBm correspond à environ 10 à 15 mètres en espace ouvert et 3 à 10 mètres à l'intérieur ou dans les espaces bondés. Vous avez ainsi de bonnes chances de repérer la personne portant des lunettes intelligentes.
- *Nearby Glasses* affiche un journal de débogage facultatif qui est exportable (en fichier txt) et dispose d'une fonction copier-coller. Ceux-ci sont destinés aux utilisateurs avancés (nerds) et pour un débogage plus approfondi.
- Sous *Paramètres*, vous pouvez spécifier la longueur du journal, le débogage (afficher tous les éléments de numérisation ou uniquement les trames ADV).
- Vous pouvez également saisir des **identifiants d'entreprise** sous forme de chaîne de valeurs hexadécimales, par exemple `0x01AB,0x058E,0x0D53`. Cela remplace la détection intégrée, de sorte que votre notification s'affiche pour les nouvelles valeurs.
- Pour une meilleure persistance, il utilise le *Foreground Service* d'Android. Vous pouvez le désactiver sous *Paramètres* si vous n'en avez pas besoin.
- Le *Notification Cooldown* sous *Paramètres* spécifie le temps qui doit s'écouler entre deux avertissements. La valeur par défaut est de 10000 ms, soit 10 s. Cela s'applique également au canari, par exemple 10 s signifie qu'il restera en alerte pendant 10 s avant de se calmer à nouveau.
- Il est maintenant un peu plus localisé : <img src="https://raw.githubusercontent.com/yjeanrenaud/yj_nearbyglasses/HEAD/img/canary_hide.svg" align="right" alt="Dessin d'un canari qui se cache sous une aile" height="100" width="100">
- Anglais
- Allemand
- Suisse allemand
- Français
- Espagnol
- Chinois
- Italien
- Portugais (Brésil)
- Russe
- Turc
- d'autres à venir, éventuellement ([soutenez ce projet en contribuant dans votre langue !](https://github.com/yjeanrenaud/yj_nearbyglasses/issues/3))
- Désormais, l'arrière-plan de l'icône de l'application n'est plus transparent
- Nous recherchons maintenant aussi les UUID
- *Nearby Glasses* prend désormais en charge le mode sombre (via les paramètres système)
- Le problème de mise en page edge-to-edge devrait être corrigé à partir de [v1.0.4](https://github.com/yjeanrenaud/yj_nearbyglasses/releases).
- Nouvellement sous licence AGPL 3.0
- J'ai décidé de renoncer au CLA. Après quelques discussions avec des personnes qui en savaient plus que moi sur les projets collaboratifs, j'ai compris que c'était une étape inutile.
## iOS et Android
- Enfin, après trois semaines, le portage iOS est disponible. Il devrait fonctionner sur la plupart des iPhones et iPads ; même les plus anciens (jusqu'à iOS 16). [Le code source et les fichiers du projet sont également fournis](https://github.com/yjeanrenaud/yj_nearbyglasses/blob/main/iOS). Le code est laid et non orthodoxe. De nombreuses approches sont rapides et sales (par exemple, je réutilise les fichiers json de la localisation Android), mais cela fonctionne jusqu'à présent. *Nearby Glasses* est disponible via l'[Apple App Store](https://apps.apple.com/us/app/nearby-glasses-original/id6761056896). (Il est appelé original pour le distinguer des imitateurs). Un fichier .ipa est disponible pour le sideloading sous [releases](https://github.com/yjeanrenaud/yj_nearbyglasses/releases).
L'application iOS ne fonctionne pas en arrière-plan, car je n'ai trouvé aucun moyen d'utiliser quelque chose de similaire aux `ForegroundServices` pour numériser en permanence les ADV BTLE en raison des restrictions iOS. Par conséquent, il n'y a qu'un *Canary Mode* disponible dans *Nearby Glasses* sous iOS. Si vous connaissez Swift et iOS mieux que moi (ce qui est probable), veuillez contribuer !
- Parce que ce dépôt contient à la fois le code des applications Android et iOS, j'ai réorganisé les dossiers. Il y a donc [/iOS](https://github.com/yjeanrenaud/yj_nearbyglasses/blob/main/iOS) et [/Android](https://github.com/yjeanrenaud/yj_nearbyglasses/blob/main/Android).
## Utilisation
- Voir [Releases](https://github.com/yjeanrenaud/yj_nearbyglasses/releases) pour télécharger l'APK ou utiliser le Google Play Store. F-Droid et/ou Accrescent pourraient suivre.
<img width="135" height="300" align ="right" alt="Capture d'écran Nearby Glasses : Paramètres" src="https://assets.kitploit.com/production/public/readmes/12083/71a0271ff9172cad52e8d83ed9a29ba43b509c7b250be2a0254a5a4371ee3401.png" />
<a href="https://play.google.com/store/apps/details?id=ch.pocketpc.nearbyglasses" target="_blank"><img width="239" height="71" alt="Obtenez-le sur Google Play" src="https://assets.kitploit.com/production/public/readmes/12083/a7dbeba4623dd255798dd1159e543cdbeeb9e43faa6db7f859b0f9ed3699932c.png" /></a> <a href="https://apps.apple.com/us/app/nearby-glasses-original/id6761056896"><img width="213" height="71" alt="Télécharger sur l'App Store" src="https://assets.kitploit.com/production/public/readmes/12083/a6fa504b048d52b4e9f5108021dce33af0d96b8b78c34095072971f4a34471fa.png" /></a>
1. Installez l'application (à partir des [Releases](https://github.com/yjeanrenaud/yj_nearbyglasses/releases) ou du [Google Play](https://play.google.com/store/apps/details?id=ch.pocketpc.nearbyglasses), pour l'instant) ou de l'[Apple App Store](https://apps.apple.com/us/app/nearby-glasses-original/id6761056896), et ouvrez-la
2. Appuyez sur le bouton *Start Scanning*
3. Accordez les autorisations pour activer le Bluetooth (s'il n'est pas déjà activé) et pour accéder aux appareils à proximité. Certaines versions d'Android nécessitent également que vous accordiez l'autorisation d'accéder à votre localisation (avant la version 13, principalement). *Nearby Glasses* ne fait rien avec vos informations de localisation. Si vous ne me croyez pas, veuillez consulter le [code](https://github.com/yjeanrenaud/yj_nearbyglasses/tree/main/app)
4. si vous ne voyez pas la numérisation démarrer, vous devrez peut-être activer le *Foreground Service* sur votre téléphone particulier dans le menu *Paramètres* (voir ci-dessous)
5. Vous êtes prêt ! Lorsque des lunettes intelligentes sont détectées à proximité, une notification apparaîtra. Elle le fera jusqu'à ce que vous appuyiez sur *Stop Scanning* ou que vous terminiez l'application définitivement
7. Dans le menu (en haut à droite, la roue dentée), vous pouvez effectuer quelques *Paramètres* :
1. *Enable Foreground Service* : Cela empêche Android de mettre l'application en pause, l'empêchant ainsi de vous alerter. Je recommande de laisser cette option activée
2. *RSSI threshold* : Ce nombre négatif spécifie à quelle distance un appareil peut se trouver pour être une raison d'alerte par *Nearby Glasses*. Techniquement, il fait référence à la force avec laquelle le signal est reçu. Plus proche de zéro signifie un meilleur signal, donc moins de distance entre votre téléphone et les lunettes intelligentes. Voir [RSSI ci-dessus pour les explications et les conseils](#how). Je recommande de le laisser à -75
3. *Enable Notifications* : Vous ne voudriez pas désactiver cela
4. Canary Mode. C'est le nouveau mode par défaut. Avec cela, vous ne recevrez pas de notifications système vous alertant de lunettes intelligentes à proximité, mais vous verrez plutôt un canari qui indique qu'il n'y a pas de lunettes intelligentes autour. L'application iOS n'a qu'un mode canari en raison de contraintes techniques. <img src="https://raw.githubusercontent.com/yjeanrenaud/yj_nearbyglasses/HEAD/img/canary.svg" alt="Dessin d'un canari" width="100" height="100" alignt="left">
5. *Notification/Canary Cooldown* : Ici, vous spécifiez combien de notifications concernant des lunettes intelligentes trouvées à proximité vous souhaitez recevoir ou combien de temps le canari doit se cacher. J'ai choisi 10 secondes (10000 ms) comme valeur par défaut. Ainsi, vous ne manquerez pas la notification tout en n'étant pas trop dérangé par elle et sans épuiser trop rapidement votre batterie
6. *Enable Log Display* : Désactiver cela pourrait vous faire économiser de la batterie. Ceci est désactivé en mode canari.
7. *Debug* : Est nécessaire pour voir plus que les seules trames BLE correspondantes dans le cadre d'affichage du journal. C'est utile pour voir si les choses fonctionnent. Ceci est désactivé en mode canari.
8. *Max log lines* : La longueur maximale du journal. 200 semble être un bon équilibre entre la durée de vie de la batterie et l'utilisabilité du journal (pour les nerds comme moi). Ceci est désactivé en mode canari.
9. *BLE ADV only* : Cela exclut les autres trames Bluetooth LE du journal pour une meilleure lisibilité. Ceci est désactivé en mode canari.
10. *Override Company IDs* : Si vous le souhaitez, vous pouvez laisser *Nearby Glasses* vous alerter d'autres appareils que ceux spécifiés ci-dessus. Utile pour le débogage, du moins pour moi. Laissez vide si vous n'en avez pas besoin ou si vous ne savez pas quoi en faire
11. Chaque paramètre est enregistré et effectif immédiatement. Pour revenir en arrière, utilisez votre bouton retour ou votre geste
8. La fonction d'exportation vous permet de partager un fichier texte du journal de l'application. Pour les nerds comme moi
9. Vous pouvez également copier-coller le journal en appuyant sur le cadre d'affichage du journal
## À faire
- **Cela fonctionne maintenant sur le terrain !** J'ai réussi à faire tester l'application par certaines personnes avec des lunettes intelligentes vérifiées autour d'elles. Merci spécial à Lena !
- Voir [Releases](https://github.com/yjeanrenaud/yj_nearbyglasses/releases) pour télécharger l'APK.
- J'ai également publié [*Nearby Glasses* sur Google Play](https://play.google.com/store/apps/details?id=ch.pocketpc.nearbyglasses). Cependant, je publierai toujours les [releases ici sur GitHub](https://github.com/yjeanrenaud/yj_nearbyglasses/releases) et [ailleurs](https://yves.app/nearbyglasses/latest.apk), pour ceux qui évitent Google Play.
---
- Ajouter une option pour mettre les faux positifs dans une liste d'ignorés. Peut-être dans la notification ?
- Je ne suis pas du tout un expert BT ou Android. D'après ce que j'ai appris, on pourrait aussi creuser plus profondément dans la communication des lunettes intelligentes en reniflant le trafic BLE. Ce faisant, nous n'aurions probablement pas besoin de nous fier au comportement de l'appareil conformément aux spécifications BT, mais nous pourrions également utiliser des heuristiques sur les transmissions de trafic chiffré sans trop de faux positifs. Mais je n'ai pas examiné les paquets de trafic BT depuis plus de dix ans. Je suis content de m'être souvenu des trames ADV... Donc si quelqu'un pouvait aider sur ce point, ce serait grandement apprécié !
---
- Ajouter **plus d'identifiants de fabricants** de lunettes intelligentes. Actuellement, il s'agit de Meta, Oakley et Snap. Une liste de lunettes intelligentes avec caméras disponibles aiderait également. J'ai ouvert une [ISSUE pour cela](https://github.com/yjeanrenaud/yj_nearbyglasses/issues/56), afin que les gens puissent **aider** en envoyant leurs journaux (qui sont parfaitement sûrs, à mon avis) lorsqu'ils rencontrent d'autres lunettes intelligentes enregistrant
- à partir du 24 mars 2026, la version iOS est également disponible.
- Le **problème de mise en page** avec les **appareils Google Pixel** semble être corrigé à partir de la version 1.0.3. Si vous ne pouvez toujours pas atteindre le menu car il est en quelque sorte mélangé avec la barre d'état. Je vais examiner cela dès que possible. En attendant, essayez de mettre votre écran en mode paysage et de le faire pivoter *dans le sens des aiguilles d'une montre (vers la droite)*.
## Tech-Solutionnisme ?
Je sais que c'est peut-être un endroit étrange pour le faire, mais écoutez-moi sur ce point. Je suis conscient que c'est une solution technique à un problème social, qui est lui-même amplifié par la technologie.
Je ne veux pas promouvoir le tech-solutionnisme ni que les gens se sentent faussement en sécurité. C'est toujours une approche imparfaite et le sera probablement toujours. Tout n'est pas bon simplement parce que cette application existe maintenant. Nous avons besoin de meilleures solutions pour freiner la technologie de surveillance et l'intrusion dans la vie privée.
## Compiler à partir des sources
Comme *Nearby Glasses* est open source, vous pouvez également compiler l'application vous-même à partir du code source. Cela garantit qu'aucune autre bibliothèque n'est incluse dans l'APK et que vous obtenez ce que vous voulez.
Veuillez noter que cette application repose sur :
- Gradle Wrapper : 9.3.1
- Android Gradle Plugin : 8.13.2
- Kotlin : 1.9.22
- compileSdk : 36
- targetSdk : 36
- minSdk : 26
- Aucune variante de produit
- Dépôts : google() et mavenCentral() uniquement
- Aucun service Google ni plugin Firebase
### Prérequis
- **JDK 17** (requis — le projet cible Java 17)
- **Android SDK Platform 35** installé
- compileSdk = 35
- targetSdk = 35
- Git
### Compilation de l'APK étape par étape```bash
#Verify Java version:
$java -version
#It must report Java 17.
#Get the source code
$git clone https://github.com/yjeanrenaud/yj_nearbyglasses
$cd yj_nearbyglasses
#Build Debug
$./gradlew clean assembleDebug
#Build Release (with your own signature cert)
$./gradlew clean assembleRelease
#Build unsigned Release for IzzyOnDroid / F-Droid
$./gradlew clean izziFdroid
#Run and Test
$./gradlew test lint
Icône de l’application : L’icône est basée sur Eyeglass icons created by Freepik - Flaticon
Licence : Cette application Nearby Glasses est sous licence AGPL-3.0 license.
Canari : Les dessins de canaris sont réalisés par moi et sous licence CC BY-SA 4.0. Je les ai fournis sous forme de fichiers svg bruts (réalisés dans InkScape) et convertis en xml, évidemment, pour les ressources de l’application