これを追加lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll);
すると、ネットワークを使用して位置の取得が開始されますが、トンネルから出ると、ネットワークとGPSからの取得が開始されます。あなたを使用しlocation.getProvider()
て、それがGPSであるかネットワークであるかを知るために区別することができるはずです。
アプリの実行中にGPSステータスが変化しない場合(たとえば、GPS修正なしで常に屋内にいる場合)、一部のデバイスはOnStatusChanged()
メソッドをトリガーしません。
アプリの実行中にGPSステータスを変更した場合(たとえば、内部にいて修正を取得できず、外部に出て修正を取得できる場合、またはその逆の場合)、OnStatusChanged()
メソッドはすべてのデバイスで起動する必要があります。
完全に機能するオープンソースアプリを例として使用したい場合は、AndroidチームのMikeLockwoodによるGPSTestを試してください。
GooglePlayでのGPSTest
GPSTestのソースコード
デバイスが修正を取得できない場合でも常に更新されるGPSの詳細については、GPSStatusListenerを登録することをお勧めします。
アクティビティで、クラス変数を宣言します。
private LocationManager mService;
private GpsStatus mStatus;
...そしてGPSStatusの変更を処理するメソッドを追加します。
public void onGpsStatusChanged(int event) {
mStatus = mService.getGpsStatus(mStatus);
switch (event) {
case GpsStatus.GPS_EVENT_STARTED:
// Do Something with mStatus info
break;
case GpsStatus.GPS_EVENT_STOPPED:
// Do Something with mStatus info
break;
case GpsStatus.GPS_EVENT_FIRST_FIX:
// Do Something with mStatus info
break;
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
// Do Something with mStatus info
break;
}
}
次に、アクティビティのOnCreate()で、GPSStatusListenerを登録します。
mService = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
mService.addGpsStatusListener(this);
GPSTestアプリでは、このコードに基づいて、GPSStatusListenerが更新されるたびに、現在利用可能な衛星のリストが画面に表示されます。
このようにして、携帯電話がGPS修正を取得できない場合でも、システムのGPSステータスに関するアクティブな更新を受信します(したがって、がトリガーされない場合がありますOnStatusChanged
)LocationListener
。