0

Selon le Location Strategies, le GPS est plus précis mais consomme rapidement la batterie. Le document recommande que la puissance de la batterie soit parmi les éléments à prendre en compte, mais à partir de ce document, il n'y a pas d'exemple de mauvaise utilisation.
Quelqu'un pourrait-il donner un tel exemple? Je demande parce que je pense à un usecase tel que E.g. si vous capturez l'emplacement de l'utilisateur 16 fois par jour (par intervalles de 30 minutes). Serait-ce un mauvais modèle de cas d'utilisation?Combien de piles le GPS consomme-t-il?

+0

Question hors sujet pour SO. Quoi qu'il en soit, les smartphones de niveau moyen produits par les grandes marques dans les 3-4 dernières années sont capables de suivre des sessions de course de 2 heures avec des points distants de 5/10 mètres et ne drainent pas plus de 10% de la batterie si le moniteur est éteint. Par conséquent votre cas d'utilisation semble être presque à 0 impact – perissf

+0

@perissf: J'ai mis à jour le PO. Est-ce une amélioration étant une question plus spécifique? – Jim

Répondre

1

EDIT

Voici un exemple de base de la mise en place d'une fonction de délai d'attente pour les demandes de localisation.

public class MyLocationManager implements LocationListener { 

    private static final int LOCATION_UPDATE = 1; 

    private LocationManager mLocationManager; 
    private Handler mHandler; 

    public MyLocationManager(Context context) { 
     mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
     mHandler = new Handler(new Handler.Callback() { 
      @Override 
      public boolean handleMessage(Message msg) { 
       switch (msg.what) { 
        case LOCATION_UPDATE: 
         stopLocationUpdates(); 
         return true; 
        default: 
         return false; 
       } 
      } 
     }); 
    } 

    public void stopLocationUpdates() { 
     mLocationManager.removeUpdates(this); 
     mHandler.removeMessages(LOCATION_UPDATE); 
    } 

    public void requestLocationUpdates(long timeOut) { 
     mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
     mHandler.sendEmptyMessageDelayed(LOCATION_UPDATE, timeOut); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     stopLocationUpdates(); 
     //YOUR CODE HERE 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 

    } 
} 

Pour répondre à titre de votre message: Il varie en fonction de l'appareil.

Pour plus de détails, cela dépend vraiment de la façon dont vous configurez vos demandes. Dans votre cas, vous dites que vous voulez 16 points dans des intervalles de 30 minutes, ce qui n'aura pas beaucoup d'impact sur le pouvoir si vous les recevez tous dans la seconde de la demande. Cependant, vous n'avez jamais spécifié combien de temps vous attendez l'arrivée de l'emplacement ou quelle devrait être l'exactitude du point de localisation que vous demandiez. Donc en théorie, vous pouvez laisser le module GPS fonctionner indéfiniment si vous cherchez des points de précision de 10m dans un sous-sol.

Ma recommandation

Découvrez la précision maximale d'un point de localisation dont vous avez besoin avant qu'il ne soit complètement inutilisable, et une fonction de temporisation solide en place. Le GPS par lui-même ne tue pas la batterie, c'est la combinaison de l'appareil étant réveillé pour recevoir l'emplacement et le module GPS étant sur que tue la vie de la batterie. Si vous laissez l'appareil allumé pendant environ 2 minutes pour recevoir 16 points (délai d'attente de ~ 8 secondes), il devrait avoir un impact négligeable sur la batterie.

+0

Je suis intéressé par une précision de moins de 3m (pas de sous-sols ou quelque chose comme ça sont préoccupants). Que voulez-vous dire par le délai d'expiration? Je vois un intervalle min dans l'API de LocationManager pour ce qui serait le toutes les 30 minutes qui m'intéressent mais pas un timeout. Pourriez-vous donner ou montrer un exemple de l'approche que vous décrivez? – Jim

+0

Cette précision est possible, mais je ne m'attendrais que dans la meilleure situation (à l'extérieur, pas de bâtiments). En ce qui concerne le timeout, si vous appelez 'requestLocationUpdates()', sauf si vous appelez explicitement 'removeUpdates()', LocationManager interroge continuellement l'emplacement jusqu'à ce qu'il en reçoive un, ce qui peut être indéfini si vous êtes dans une zone privée de GPS. Même si vous définissez minTime sur 30 minutes, à moins que vous n'obteniez un point tout de suite, le module GPS reste allumé jusqu'à ce que vous receviez un point. –

+0

Existe-t-il un bon exemple en ligne que je puisse utiliser comme référence pour cette approche? – Jim