IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

GPS (ou pas) sur device ET activé (ou pas)


Sujet :

API standards et tierces Android

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Alors j'ai de très lointains souvenirs concernant cela...

    Il me semble que pour tester si le "GPS" est enabled c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    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!

  4. #4
    Membre actif Avatar de IsiTech
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Janvier 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Janvier 2012
    Messages : 105
    Points : 268
    Points
    268
    Par défaut
    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.

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    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.........................

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    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...................

  7. #7
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    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

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    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.

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    Juste une précision, si ça peut servir à d'autres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PackageManager packageManager = mContext.getPackageManager();
    		boolean  hasGPS = packageManager.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS);
    		return hasGPS;
    OU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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);

  10. #10
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par steph68b Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    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

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    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.

  12. #12
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    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

  13. #13
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    Ok, en cours...
    Et merci pour le tuyau des ','!

  14. #14
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    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...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boot sur la partition D et pas sur C!
    Par poche dans le forum Windows Vista
    Réponses: 2
    Dernier message: 03/09/2007, 10h56
  2. execution sur l'emulateur mais non pas sur le Pocket PC
    Par inter_amine dans le forum Windows Mobile
    Réponses: 2
    Dernier message: 08/06/2007, 09h35
  3. Réponses: 6
    Dernier message: 19/02/2007, 15h50
  4. Réponses: 4
    Dernier message: 30/08/2006, 08h37
  5. [Tomcat]Fonctionne sur Tomcat 3.2.1, pas sur 4.1.27
    Par lujayne dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 07/08/2003, 09h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo