GPSで多くのテストを行った後、最終的に解決策を見つけました。Androidアプリがロケーションマネージャーを呼び出し、GPSが検索を開始すると、1つのイベントがトリガーされ、gpsがロックされると別のイベントがトリガーされます。次のコードは、これを行う方法を示しています。
locationManager = (LocationManager)mContext.getSystemService(LOCATION_SERVICE);
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (isGPSEnabled) {
if (locationManager != null) {
// Register GPSStatus listener for events
locationManager.addGpsStatusListener(mGPSStatusListener);
gpslocationListener = new LocationListener() {
public void onLocationChanged(Location loc) {}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES_GPS, MIN_DISTANCE_CHANGE_FOR_UPDATES_GPS,
gpslocationListener);
}
}
/ * *これは、GPSの開始、GPSの停止、GPSのロックなどのさまざまなイベントが発生したときに呼び出されるGPSListener関数です* /
public Listener mGPSStatusListener = new GpsStatus.Listener() {
public void onGpsStatusChanged(int event) {
switch(event) {
case GpsStatus.GPS_EVENT_STARTED:
Toast.makeText(mContext, "GPS_SEARCHING", Toast.LENGTH_SHORT).show();
System.out.println("TAG - GPS searching: ");
break;
case GpsStatus.GPS_EVENT_STOPPED:
System.out.println("TAG - GPS Stopped");
break;
case GpsStatus.GPS_EVENT_FIRST_FIX:
/*
* GPS_EVENT_FIRST_FIX Event is called when GPS is locked
*/
Toast.makeText(mContext, "GPS_LOCKED", Toast.LENGTH_SHORT).show();
Location gpslocation = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(gpslocation != null) {
System.out.println("GPS Info:"+gpslocation.getLatitude()+":"+gpslocation.getLongitude());
/*
* Removing the GPS status listener once GPS is locked
*/
locationManager.removeGpsStatusListener(mGPSStatusListener);
}
break;
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
// System.out.println("TAG - GPS_EVENT_SATELLITE_STATUS");
break;
}
}
};
GPSコードを入れて、GPS位置情報を取得するサービスとして使用することをお勧めします。
GPS関数を呼び出すたびに、GPSStatusリスナーが登録されます。GPS_SEARCHINGトーストはGPSの検索が開始されたときに一度だけ発生し、GPS_LOCKEDトーストはGPSがロックされたときに表示されます。GPS関数を再度呼び出すと、ロックされている場合(GPS_LOCKEDトーストを表示)にGPS_EVENT_FIRST_FIXイベントがトリガーされ、GPSがすでに検索を開始している場合は、GPS_SEARCHINGトーストは表示されません(つまり、GPS_STARTEDイベントはトリガーされません)。GPS_EVENT_FIRST_FIXイベントがトリガーされた後、GPSstatusリスナーの更新を削除します。
GPS_EVENT_FIRST_FIXイベントがトリガーされたら、gpslastknownlocation()関数を呼び出して、最新のGPS修正を取得することをお勧めします(詳細については、Android開発者サイトを参照することをお勧めします)。
これが他の人の役に立つことを願っています。