Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Java & Mobiles > Android
Android Forum d'entraide sur Android, la plateforme mobile de Google pour téléphones portables et Smartphones. Avant de poster -> FAQ Android
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/01/2013, 10h51   #1
steph68b
Membre régulier
 
Homme
Inscription : mai 2012
Messages : 244
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2012
Messages : 244
Points : 70
Points : 70
Par défaut GPS (ou pas) sur device ET activé (ou pas)

Hello & bonne année à tous déjà!

Je voudrais pourvoir déterminer:
1.) si un GPS est bien présent sur un device
2.) et si oui, est-il activé (ou pas)?

Pour ce faire j'ai essayé plusieurs fonctions, par exemple:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
	public static boolean isGpsEnabled(Context context) 
	{
	    ContentResolver cr = context.getContentResolver();
	    String providersAllowed = Settings.Secure.getString(cr, Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
	    return providersAllowed != null && providersAllowed.length() > 0;
	}
	public static boolean hasGPSDevice(Context context)
    {
	    final LocationManager mgr = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
	    if ( mgr == null ) return false;
	    final List<String> providers = mgr.getAllProviders();
	    if ( providers == null ) return false;
	    return providers.contains(LocationManager.GPS_PROVIDER);
    }
	public static boolean existGPSOnDevice(Context mContext)
	{
		PackageManager packageManager = mContext.getPackageManager();
		boolean  hasGPS = packageManager.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS);
		return hasGPS;
	}
Le problème étant qu'elles fonctionnent bien sur ma galaxy tab (4.1.1)....... et pas du tout sur nexus 7 (4.1.2).
-> en fait elles renvoient systématiquement TRUE sur la nexus
-> même qd je désactive le GPS!
-> et le pire c que la nexus me ramène qd même des data, même en mettant le gps OFF(??)

Une idée pour tester à la fois la présence physique d'une puce gps & le fait que la fct soit activée ou pas?

Pour le moment, ce qui marche c'est ça:
Code :
1
2
3
4
5
6
7
 
	public static boolean existGPS(Context c)
	{
    	String provider = Settings.Secure.getString(c.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
		if (Fonctions.wildCardMatch(provider, "*gps*")) return true;
		else											return false;
	}
mais bon, une recherche de "gps" dans la string, ça fait un peu bricolage à mes yeux.....

Merci.
steph68b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 11h41   #2
nicroman
Modérateur
 
Homme Nicolas Romantzoff
Ingénieur systèmes et réseaux
Inscription : février 2007
Messages : 2 858
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Romantzoff
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2007
Messages : 2 858
Points : 4 901
Points : 4 901
Envoyer un message via Skype™ à nicroman
Alors j'ai de très lointains souvenirs concernant cela...

Il me semble que pour tester si le "GPS" est enabled c'est:
Code :
1
2
3
 
final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );
manager.isProviderEnabled( LocationManager.GPS_PROVIDER )
Et pour savoir si il y a un GPS device:
Code :
1
2
3
 
final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );
manager.getAllProviders()
Ce qui correspond a ta fonction "hasGPSDevice()"
Et rechercher la chaine LocationManager.GPS_PROVIDER

Désactiver le GPS n'empêchera pas la désactivation du location-manager. On peut même recevoir des localisations avec granularité fine selon les réseaux wi-fi environnants !
__________________
N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
Et surtout
nicroman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 11h56   #3
steph68b
Membre régulier
 
Homme
Inscription : mai 2012
Messages : 244
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2012
Messages : 244
Points : 70
Points : 70
Remarque, maintenant que j'y pense, le fait de savoir s'il y a une puce ou pas sur le device n'est pas vital puisque l'idée c'est d'afficher/cacher un bouton de géoloc.

Il suffit de tester si GPS activé ou pas finalement.
-> s'il ne l'est pas, on se fout de savoir s'il y a une puce, on cache le bouton
-> s'il l'est, il y en a forcément une, donc on l'affiche

Non?

Et pour "ma" fct existGPS(), bricolage alors, ou pas?

Parce que je voudrais vraiment un truc qui réagisse au ON/OFF du GPS........ parce que je sais déjà que mon boss (dont je t'ai déjà parlé 12 625 fois ...........) va faire ce test là!

Et, pour lui, s'il désactive le GPS et que le bouton de géoloc s'affiche qd même, ça n'ira pas!
steph68b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 13h12   #4
IsiTech
Membre actif
 
Avatar de IsiTech
 
Homme
Étudiant
Inscription : janvier 2012
Messages : 71
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 71
Points : 198
Points : 198
Citation:
Envoyé par steph68b Voir le message
Remarque, maintenant que j'y pense, le fait de savoir s'il y a une puce ou pas sur le device n'est pas vital puisque l'idée c'est d'afficher/cacher un bouton de géoloc.

Il suffit de tester si GPS activé ou pas finalement.
-> s'il ne l'est pas, on se fout de savoir s'il y a une puce, on cache le bouton
-> s'il l'est, il y en a forcément une, donc on l'affiche

Non?
De manière générale je dirais non. Je n'active pas mon GPS si je n'en ai pas besoin, donc si l'application ne me fait pas comprendre qu'elle peut utiliser le GPS pour me proposer un service, je (et l'utilisateur) ne le saura jamais.

Je pense qu'afficher le bouton grisé, et sur un clic inviter l'utilisateur a activer son GPS si celui ci est désactivé serait préférable.
IsiTech est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 13h23   #5
steph68b
Membre régulier
 
Homme
Inscription : mai 2012
Messages : 244
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2012
Messages : 244
Points : 70
Points : 70
Je suis bien d'accord avec toi, et je pense qu'on est 98% à penser comme ça.
Bien pour ça que j'ai proposé exactement le grisage plutôt que la suppression.

Mais mon boss lui est sur une autre planète.........................
steph68b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 13h25   #6
steph68b
Membre régulier
 
Homme
Inscription : mai 2012
Messages : 244
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2012
Messages : 244
Points : 70
Points : 70
Citation:
Envoyé par steph68b Voir le message
Je suis bien d'accord avec toi, et je pense qu'on est 98% à penser comme ça.
Bien pour ça que j'ai proposé exactement le grisage plutôt que la suppression.

Mais mon boss lui est sur une autre planète.........................
Demande Nicroman s'il a encore des cheveux, à force d'écouter "mes" questions...................
steph68b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 18h31   #7
nicroman
Modérateur
 
Homme Nicolas Romantzoff
Ingénieur systèmes et réseaux
Inscription : février 2007
Messages : 2 858
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Romantzoff
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2007
Messages : 2 858
Points : 4 901
Points : 4 901
Envoyer un message via Skype™ à nicroman
En fait c'est le même problème en HTML5....

Il y a un outil: "LocationManager" qui renvoit des positions avec une granularité plus ou moins fine...
Ce manager recoit les informations de plein de "providers", entre autre:
- GSM: Les antennes GSM/3G renvoient des informations de position et de puissance nominale. En fonction de la puissance reçue, des antennes "visibles" etc, il est possible de trianguler une position. Donc TOUS les appareils GSM ont un "LocationManager" capables de renvoyer une position. Bien sur la précision est pas terrible (de 50m à 5km).
- WiFi: Google maintient une base de données entre les points d'accès wi-fi et les localisations. Cette base de donnée est mise à jour automatiquement par les appareils android quand ils "reperent" un réseau wi-fi, avec le GPS actif (et locké). Du coups... Accès internet + réseau wi-fi visible => localisation à environ 30m de précision (chez moi c'est même à 5m de précision).
- GPS: bien entendu.

Avoir le GPS activé ou non n'empêche pas de recevoir des informations de localisation.
Par contre, un bouton pour "activer" le GPS (seulement si celui-ci n'est pas activé) est très important dans une application qui a besoin d'une granularité fine. Par contre l'Intent du bouton ne fera qu'ouvrir la page de paramètres ad hoc. Et on peut effectivement le griser si on trouve que le GPS est déjà enabled.

Quant à mes cheveux ça va ils sont bien là
__________________
N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
Et surtout
nicroman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 12h15   #8
steph68b
Membre régulier
 
Homme
Inscription : mai 2012
Messages : 244
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2012
Messages : 244
Points : 70
Points : 70
Ok, donc effectivement, il faut tester la présence de la puce:

-> NON: problème réglé!

-> OUI: localisation encore possible malgré tout via le wifi (ou autre)... même si la puce elle est OFF



Précis, rapide & clair, comme d'hab'!
Merci.
steph68b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 13h43   #9
steph68b
Membre régulier
 
Homme
Inscription : mai 2012
Messages : 244
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2012
Messages : 244
Points : 70
Points : 70
Juste une précision, si ça peut servir à d'autres.

Code :
1
2
final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );
manager.getAllProviders()
-> teste si la fct GPS est on/off, et non la présence d'une puce physique
-> en tout cas c'est le résultat que j'obtiens avec ma Galaxy Tab 10.1

Par contre, impossible de tester ici sur un device sans puce!
Le seul qu'on ait c'est 1 kindle fire hd... mais c tellement la ****** que j'ai déjà perdu 1 matinée sans succès!

Donc est ce que qq'un pourrait tester ces 2 fcts sur un device sans puce gps et me dire si elles fonctionnent (ou pas!)?

Code :
1
2
3
PackageManager packageManager = mContext.getPackageManager();
		boolean  hasGPS = packageManager.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS);
		return hasGPS;
OU

Code :
1
2
3
4
5
final LocationManager mgr = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
	    if ( mgr == null ) return false;
	    final List<String> providers = mgr.getAllProviders();
	    if ( providers == null ) return false;
	    return providers.contains(LocationManager.GPS_PROVIDER);
steph68b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 14h33   #10
nicroman
Modérateur
 
Homme Nicolas Romantzoff
Ingénieur systèmes et réseaux
Inscription : février 2007
Messages : 2 858
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Romantzoff
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2007
Messages : 2 858
Points : 4 901
Points : 4 901
Envoyer un message via Skype™ à nicroman
Citation:
Envoyé par steph68b Voir le message
Code :
1
2
final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );
manager.getAllProviders()
-> teste si la fct GPS est on/off, et non la présence d'une puce physique
-> en tout cas c'est le résultat que j'obtiens avec ma Galaxy Tab 10.1
Pas chez moi... ca renvoit bien GPS alors qu'il est bien "off".
D'ailleurs la doc est très claire:
Citation:
Envoyé par Documentation Android
public List<String> getAllProviders ()

Added in API level 1
Returns a list of the names of all known location providers.

All providers are returned, including ones that are not permitted to be accessed by the calling activity or are currently disabled.
Citation:
Par contre, impossible de tester ici sur un device sans puce!
Il suffit de tester sur un AVD sans GPS...
__________________
N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
Et surtout
nicroman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 15h45   #11
steph68b
Membre régulier
 
Homme
Inscription : mai 2012
Messages : 244
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2012
Messages : 244
Points : 70
Points : 70
C'est ce que j'avais essayé avec un émulateur "kindle hd 7", mais l'appli refusait de se lancer à cause des librairies partagées de maps.
steph68b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 16h23   #12
nicroman
Modérateur
 
Homme Nicolas Romantzoff
Ingénieur systèmes et réseaux
Inscription : février 2007
Messages : 2 858
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Romantzoff
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2007
Messages : 2 858
Points : 4 901
Points : 4 901
Envoyer un message via Skype™ à nicroman
Non mais il suffit de créer un AVD de toute pièce....

Enfin... un DEVICE de toute pièce... et utiliser un AVD existant qui fonctionne sur ce device...
Attention, sur un windows français, il faut aller éditer le fichier "device.xml" (dans $USER_HOME$\.android\device.xml) et remplacer toutes les ',' dans les valeurs par des points ! Sinon, le device 'disparaitra' au prochain démarrage de l'AVD manager.
__________________
N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
Et surtout
nicroman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 09h05   #13
steph68b
Membre régulier
 
Homme
Inscription : mai 2012
Messages : 244
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2012
Messages : 244
Points : 70
Points : 70
Ok, en cours...
Et merci pour le tuyau des ','!
steph68b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 09h54   #14
steph68b
Membre régulier
 
Homme
Inscription : mai 2012
Messages : 244
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2012
Messages : 244
Points : 70
Points : 70
Et donc, si ça peut servir à d'autres, les 2 fcts citées plus haut fonctionnent.
En tout cas dans un émulateur perso de GalaxyTab sans puce GPS...
steph68b est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h03.


 
 
 
 
Partenaires

Hébergement Web