2 votes

Pourquoi mon téléphone portable essaie-t-il de cacher l'utilisation du GPS ?

J'ai remarqué que mon téléphone cessait parfois d'utiliser le GPS au moment même où j'allumais l'écran. C'est perceptible parce qu'il y a l'animation de la notification qui indique que le GPS est en cours d'utilisation. Je ne vois pas pourquoi mon téléphone essaie de se localiser à ce moment-là.

Au moins un autre utilisateur a signalé ce comportement, ici dans un commentaire à Comment vérifier quelle application utilise le GPS sur le Galaxy Nexus ? :

[...] c'est juste que lorsque téléphone, je peux voir l'icône GPS dans la barre de notifications pendant une seconde, puis elle disparaît. [...] - Dario Solera 22 juin 12 à 7:01

J'ai ensuite utilisé logcat pour enregistrer le journal dans un fichier sur le téléphone afin d'examiner plus tard ce qui se passe :

username@desktop:~$ adb shell
shell@jflte:/ $ logcat -r 1048576 -n 10 -f /mnt/extSdCard/logging/main.txt &

À 01:52, lorsque j'ai allumé mon téléphone, j'ai de nouveau observé le comportement mentionné (la notification GPS disparaît dès que j'allume l'écran de mon téléphone). J'ai ensuite copié main.txt sur mon ordinateur de bureau et filtré avec cat main.txt | grep -a -i location . Le log du temps en question est le suivant :

06-12 01:34:46.293 D/GpsLocationProvider(  908): receive broadcast intent, action: android.intent.action.SCREEN_OFF
06-12 01:38:36.815 W/ResourcesManager( 9551): Asset path '/system/framework/com.android.location.provider.jar' does not exist or contains no resources.
06-12 01:52:50.265 I/LocationManagerService(  908): remove 2bd78731 by com.google.android.gms
06-12 01:52:50.265 D/LocationManagerService(  908): provider request: passive ProviderRequest[ON interval=0]
06-12 01:52:50.265 D/LocationManagerService(  908): request 325c2a7a gps Request[ACCURACY_FINE gps requested=0 fastest=0] from com.google.android.gms(10055)
06-12 01:52:50.265 D/LocationManagerService(  908): provider request: gps ProviderRequest[ON interval=0]
06-12 01:52:50.275 D/GpsLocationProvider(  908): setRequest ProviderRequest[ON interval=0]
06-12 01:52:50.275 D/GpsLocationProvider(  908): startNavigating, singleShot is false
06-12 01:52:50.275 D/GpsLocationProvider_ex(  908): Data state true
06-12 01:52:50.275 D/GpsLocationProvider_ex(  908): getSKAFEnable : false
06-12 01:52:50.285 D/GpsLocationProvider(  908): setting position_mode to MS_BASED
06-12 01:52:50.505 E/LocSvc_ApiV02(  908): I/<--- void globalEventCb(locClientHandleType, uint32_t, locClientEventIndUnionType, void*) line 99 QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02
06-12 01:52:50.505 V/GpsLocationProvider(  908): AGpsStatus is V2+: 96
06-12 01:52:50.505 V/GpsLocationProvider(  908): AGPS IP is v4: ffffffff
06-12 01:52:50.505 V/GpsLocationProvider(  908): Passing AGPS IP addr: size 0
06-12 01:52:50.505 D/GpsLocationProvider(  908): GPS_REQUEST_AGPS_DATA_CONN
06-12 01:52:50.505 V/GpsLocationProvider(  908): Received SUPL IP addr[]: null
06-12 01:52:50.545 D/GpsLocationProvider(  908): PhoneConstants.APN_ALREADY_ACTIVE
06-12 01:52:50.585 E/LocSvc_ApiV02(  908): I/<--- void globalRespCb(locClientHandleType, uint32_t, locClientRespIndUnionType, void*) line 125 QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02
06-12 01:52:50.905 V/GpsLocationProvider(  908): reportStatus status: 3
06-12 01:52:50.905 V/GpsLocationProvider(  908): reportStatus status: 1
06-12 01:52:50.905 D/GpsLocationProvider(  908): send an intent to notify GPS has been enabled or disabled mNavigating = true
06-12 01:52:51.055 D/GpsLocationProvider(  908): receive broadcast intent, action: android.net.conn.CONNECTIVITY_CHANGE
06-12 01:52:51.766 D/GpsLocationProvider(  908): receive broadcast intent, action: android.intent.action.SCREEN_ON
06-12 01:52:51.856 I/LocationManagerService(  908): remove 325c2a7a by com.google.android.gms
06-12 01:52:51.856 D/LocationManagerService(  908): provider request: gps ProviderRequest[OFF]
06-12 01:52:51.856 D/GpsLocationProvider(  908): setRequest ProviderRequest[OFF]
06-12 01:52:51.856 D/GpsLocationProvider(  908): stopNavigating
06-12 01:52:51.866 D/LocationManagerService(  908): request 3ec60783 passive Request[POWER_NONE passive fastest=0] from com.google.android.gms(10055)
06-12 01:52:51.866 D/LocationManagerService(  908): provider request: passive ProviderRequest[ON interval=0]
06-12 01:52:51.916 V/GpsLocationProvider(  908): reportStatus status: 2
06-12 01:52:51.916 D/GpsLocationProvider(  908): send an intent to notify GPS has been enabled or disabled mNavigating = false
06-12 01:52:51.916 V/GpsLocationProvider(  908): reportStatus status: 4
06-12 01:52:52.677 E/LocSvc_ApiV02(  908): I/<--- void globalEventCb(locClientHandleType, uint32_t, locClientEventIndUnionType, void*) line 99 QMI_LOC_EVENT_LOCATION_SERVER_CONNECTION_REQ_IND_V02
06-12 01:52:52.697 E/LocSvc_ApiV02(  908): I/<--- void globalRespCb(locClientHandleType, uint32_t, locClientRespIndUnionType, void*) line 125 QMI_LOC_INFORM_LOCATION_SERVER_CONN_STATUS_REQ_V02
06-12 01:52:52.697 V/GpsLocationProvider(  908): AGpsStatus is V2+: 96
06-12 01:52:52.697 V/GpsLocationProvider(  908): AGPS IP is v4: ffffffff
06-12 01:52:52.697 V/GpsLocationProvider(  908): Passing AGPS IP addr: size 0
06-12 01:52:52.697 D/GpsLocationProvider(  908): GPS_RELEASE_AGPS_DATA_CONN
06-12 01:52:53.398 D/GpsLocationProvider(  908): receive broadcast intent, action: android.net.conn.CONNECTIVITY_CHANGE
06-12 01:52:53.398 D/GpsLocationProvider(  908): receive broadcast intent, action: android.net.conn.CONNECTIVITY_CHANGE
06-12 01:52:54.098 D/LocationManagerService(  908): getLastLocation: Request[POWER_NONE passive fastest=0 num=1]
06-12 01:52:54.349 W/ResourcesManager(10089): Asset path '/system/framework/com.android.location.provider.jar' does not exist or contains no resources.
06-12 01:52:54.729 D/LocationManagerService(  908): getLastLocation: Request[POWER_NONE passive fastest=0 num=1]
06-12 01:52:54.859 D/LocationManagerService(  908): getLastLocation: Request[POWER_NONE passive fastest=0 num=1]
06-12 01:52:56.601 I/dex2oat (10211): /system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --instruction-set=arm --instruction-set-features=div --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --dex-file=/data/data/com.google.android.gms/app_fb/f.apk --oat-fd=46 --art-fd=-1 --oat-location=/data/data/com.google.android.gms/app_fb/f.dex --runtime-arg -Xms64m --runtime-arg -Xmx512m
06-12 01:53:05.780 D/LocationProviderProxy(  908): applying state to connected service
06-12 01:53:05.800 D/LocationProviderProxy(  908): applying state to connected service
06-12 01:54:49.651 D/GpsLocationProvider(  908): receive broadcast intent, action: android.intent.action.SCREEN_OFF

Comme vous pouvez le voir, la requête GPS est annulée 90 ms après l'émission de l'intention SCREEN_ON. Je suis sûr qu'il s'agit d'une réaction directe à l'émission, car j'ai vu ce comportement à de nombreuses reprises.

Y a-t-il une raison de cacher l'utilisation du GPS ? Est-il préférable d'utiliser le GPS lorsque l'écran est éteint afin de réduire l'utilisation maximale de la batterie ? Qu'est-ce qui déclenche la demande de GPS ? Est-ce que com.google.Android.gms est l'application Google Maps ? Pourquoi demanderait-il une mise à jour de la position 18 minutes après que j'ai éteint l'écran ?

2voto

Andy Brudtkuhl Points 1714

Plusieurs fonctionnalités de Google Play Services doivent vérifier votre position en arrière-plan, peut-être même lorsque vous n'utilisez pas votre téléphone. Il s'agit notamment des géofences, qui permettent aux applications de réagir lorsque vous entrez ou sortez d'une région particulière (par exemple, lorsque vous êtes chez vous) ; de l'historique des positions, si vous l'avez activé ; des bulletins météorologiques de Google Now et des suggestions de lieux à proximité ; du suivi de l'activité ou de la condition physique, entre autres.

La durée de vie de la batterie serait très réduite si le téléphone devait constamment se réveiller pour répondre à ces demandes. Lorsque vous n'utilisez pas votre téléphone, il passe normalement en mode "basse consommation", dans lequel aucune application ne fonctionne (pas même les services Google Play), le processeur principal est sous-cadencé ou complètement éteint, et les radios (la radio cellulaire, la radio Wi-Fi, la radio Bluetooth et le GPS) peuvent également être éteintes ou mises en mode "veille". Sortir de ce mode veille coûte pas mal d'énergie, c'est pourquoi Android essaie de minimiser les réveils inutiles, afin de prolonger la durée de vie de la batterie.

C'est pourquoi le planificateur d'Android pour les tâches d'arrière-plan récurrentes retarde souvent une tâche d'arrière-plan (telle qu'une mise à jour de la position) pendant que le téléphone est endormi, ou regroupe plusieurs tâches (telles qu'une mise à jour de la position et une vérification des nouveaux courriels). Mais si le téléphone doit se réveiller de toute façon, parce que vous venez d'allumer l'écran, toutes les tâches qui ont été retardées seront exécutées immédiatement.

La mise à jour de la position de Google Play Services ne prend qu'une fraction de seconde, surtout si votre position n'a pas beaucoup changé. On a donc l'impression qu'elle s'arrête lorsque vous allumez l'écran, alors qu'en réalité, la mise à jour a pris moins de temps qu'il n'en a fallu pour déverrouiller le téléphone. L'arrêt de la demande n'est pas "une réaction directe à la diffusion de [SCREEN_ON]" : au contraire, démarrage la demande est une réaction au fait que vous avez sorti le téléphone de son sommeil.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X