Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 14 sur 14
  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 291
    Points : 72
    Points
    72

    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.

  2. #2
    Modérateur

    Homme Profil pro Nicolas Romantzoff
    Ingénieur systèmes et réseaux
    Inscrit en
    février 2007
    Messages
    3 671
    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 : 3 671
    Points : 5 786
    Points
    5 786

    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 :
    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

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 291
    Points : 72
    Points
    72

    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 confirmé Avatar de IsiTech
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : janvier 2012
    Messages : 93
    Points : 211
    Points
    211

    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 régulier
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 291
    Points : 72
    Points
    72

    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 régulier
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 291
    Points : 72
    Points
    72

    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
    Modérateur

    Homme Profil pro Nicolas Romantzoff
    Ingénieur systèmes et réseaux
    Inscrit en
    février 2007
    Messages
    3 671
    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 : 3 671
    Points : 5 786
    Points
    5 786

    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 régulier
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 291
    Points : 72
    Points
    72

    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 régulier
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 291
    Points : 72
    Points
    72

    Par défaut

    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);

  10. #10
    Modérateur

    Homme Profil pro Nicolas Romantzoff
    Ingénieur systèmes et réseaux
    Inscrit en
    février 2007
    Messages
    3 671
    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 : 3 671
    Points : 5 786
    Points
    5 786

    Par défaut

    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.
    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 régulier
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 291
    Points : 72
    Points
    72

    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
    Modérateur

    Homme Profil pro Nicolas Romantzoff
    Ingénieur systèmes et réseaux
    Inscrit en
    février 2007
    Messages
    3 671
    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 : 3 671
    Points : 5 786
    Points
    5 786

    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 régulier
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 291
    Points : 72
    Points
    72

    Par défaut

    Ok, en cours...
    Et merci pour le tuyau des ','!

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 291
    Points : 72
    Points
    72

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •