0

Location Strategiesによれば、GPSは最も正確ですが、すぐにバッテリ電源を消費します。この文書では、電池の消費電力を考慮する必要があることを推奨していますが、その文書から悪い使用法の例はありません。
このような例を提供してもらえますか?
などのユースケースを考えているので、私は尋ねています。ユーザーの場所を1日に16回(30分間隔で)キャプチャしている場合。それは悪いユースケースモデルですか?ここでGPSはどれくらいのバッテリーを消費しますか?

+0

質問はSOの話題です。とにかく、最新の3〜4年の間に主要ブランドが生産する中規模のスマートフォンは、5時間10分の距離で2時間持続するセッションを追跡することができ、モニターがオフの場合、バッテリーの10%以下が消費されます。したがって、あなたのユースケースはほぼ0の影響を受けているようです。 – perissf

+0

@perissf:私はOPを更新しました。それはより具体的な質問である改善ですか? – Jim

答えて

1

EDIT

は、ロケーション要求のタイムアウト機能を設定するのは非常に基本的な例です。


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

    } 
} 

はあなたのポストのタイトルに答えるために:これは、デバイスによって異なります。

詳細については、どのようにリクエストを設定するかによって大きく異なります。あなたの場合、30分間隔で16ポイントが必要だと言いますが、リクエストの1秒以内にすべてを受け取った場合、電力に大きな影響を与えません。しかし、あなたは、あなたが場所が到着するのを待つか、またはあなたが要求していた場所の正確さがどんなものであるべきかを決して指定しなかった。理論的には、地下室で10mの精度ポイントを探している場合、GPSモジュールを無期限に稼動させることができます。

私の推薦

は、それが完全に使用できなくなる前に、あなたが必要な地点の最大精度を調べ、所定の位置に固体タイムアウト機能を持っています。 GPS自体はバッテリーを殺しません。それは、デバイスを起動するために目を覚ますことと、GPSモジュールが搭載されてバッテリ寿命を延ばすことの組み合わせです。 16ポイント(約8秒のタイムアウト)を受信するためにデバイスを約2分間オンにしておくと、バッテリーにはほとんど影響しません。

+0

私は3m以内の精度に関心があります(地下室やそのようなものは心配ありません)。タイムアウトの意味は?私は興味がある30分ごとのタイムアウトではなく、何かのためのLocationManager APIの最小間隔を参照してください。記述しているアプローチのいくつかの例を挙げたり、指摘したりできますか? – Jim

+0

その正確さは可能ですが、私はそれが最良の状況(外、建物なし)でしか期待しません。タイムアウトに関しては、 'removeUpdates()'を明示的に呼び出さない限り、 'requestLocationUpdates()'を呼び出すと、LocationManagerはGPS受信が完了するまで位置をポーリングし続けます。 minTimeを30分に設定しても、すぐにポイントを取得しない限り、GPSモジュールはポイントを受け取るまでオンのままです。 –

+0

このアプローチの参考に使用できるオンラインの良い例がありますか? – Jim

関連する問題