2012年7月17日火曜日

Androidの測位APIの違い

Androidの測位APIには、以下の5つがあるが、その違いがわからないので調べてみた。
http://developer.android.com/reference/android/location/LocationManager.html

  • public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)
  • public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener, Looper looper)
  • public void requestLocationUpdates (String provider, long minTime, float minDistance, PendingIntent intent)
  • public void requestLocationUpdates (long minTime, float minDistance, Criteria criteria, PendingIntent intent)
  • public void requestLocationUpdates (long minTime, float minDistance, Criteria criteria, LocationListener listener, Looper looper)

public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)

  • API Level 1
  • 指定されたプロバイダで定期的に測位する。
  • 測位には時間がかかるので、すぐにほしい場合は、 getLastKnownLocation(String)で取得。
  • 更新の時間インターバルは、minTime[ms]以上になる。
    • minTimeの値が小さいと、バッテリ消費につながる。foregroundアプリでなければ、5分以上であることを推奨する。foregroundアプリならば、ユーザ・エクスペリエンスに応じて決める。
  • 更新の距離インターバルは、minDistance[m]以上になる。
  • 消費電力を抑えるために、PASSIVE_PROVIDERを選ぶと、他のアプリが取得した位置を流用できるようになる。
  • メインスレッドなどのlooperが必要。
    • つまり、例えば、foregroundで動作していなくてはならない。

public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener, Looper looper)

  • API Level 1
  • requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)との違い
    • looperを指定すれば、メインスレッドがなくてもよい。

public void requestLocationUpdates (String provider, long minTime, float minDistance, PendingIntent intent)

  • API Level 3
  • requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)との違い
    • Intentを使って測位を依頼する。

public void requestLocationUpdates (long minTime, float minDistance, Criteria criteria, PendingIntent intent)

  • API Level 9
  • requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)との違い
    • Intentを使って測位を依頼する。
    • providerを指定しなくても、Criteriaで正確さを設定すれば、あとは、適当にやってくれる。

public void requestLocationUpdates (long minTime, float minDistance, Criteria criteria, LocationListener listener, Looper looper)

  • API Level 9
  • requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)との違い
    • looperを指定しなくてはならない。
    • providerを指定しなくても、Criteriaで正確さを設定すれば、あとは、適当にやってくれる。

考察

とくに不都合がなければ、最初のAPIである
  • public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)
を使うのが無難であり、これを紹介しているサイトが多い。

メインのアクティビティが終了した後も動作させたい場合、
  • public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener, Looper looper)
  • public void requestLocationUpdates (String provider, long minTime, float minDistance, PendingIntent intent)
を使う。しかし、参考になるサイトが少ない。

Criteriaを指定して使いたい場合、
  • public void requestLocationUpdates (long minTime, float minDistance, Criteria criteria, PendingIntent intent)
  • public void requestLocationUpdates (long minTime, float minDistance, Criteria criteria, LocationListener listener, Looper looper)
以下のサイトが参考になる。

ほかの参考

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。