アプリでGPS時間を表示する方法を探しています。これを行う最も簡単な方法は何ですか?
(gps時間と内部システム時間のわずかな時間差のため、GPS時間である必要があります)
ありがとう
GPS時間を取得することはかなり混乱する可能性があります!受け入れられた回答で議論を拡張するために、onLocationChanged()コールバックのgetTime()は、場所(必ずしもGPSである必要はありません)情報の取得方法に応じて異なる回答を提供します(Nexus 5テストに基づく)。
(a)Google FusedLocationProviderApi (Google Location Services API)を使用している場合、getProvider()は「fused」を返し、getTime()はデバイスの時刻を返します(System.currentTimeMillis())
(b)Android LocationManager (Android Location API)を使用している場合、電話の「場所」設定とrequestLocationUpdates設定(LocationManager.NETWORK_PROVIDERおよび/またはLocationManager.GPS_PROVIDER)に応じて、getProvider()は次を返します。
基本的に:「融合」はGPSとWi-Fi /ネットワークを使用し、「ネットワーク」はWi-Fi /ネットワークを使用し、「gps」はGPSを使用します。
したがって、GPS時刻を取得するには、requestLocationUpdatesをLocationManager.GPS_PROVIDERに設定してAndroidLocationManagerを使用します。(この場合、getTime()ミリ秒の部分は常に000であることに注意してください)
Android LocationManager(Android Location API)を使用した例を次に示します。
public void InitialiseLocationListener(android.content.Context context) {
android.location.LocationManager locationManager = (android.location.LocationManager)
context.getSystemService(android.content.Context.LOCATION_SERVICE);
android.location.LocationListener locationListener = new android.location.LocationListener() {
public void onLocationChanged(android.location.Location location) {
String time = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss.SSS").format(location.getTime());
if( location.getProvider().equals(android.location.LocationManager.GPS_PROVIDER))
android.util.Log.d("Location", "Time GPS: " + time); // This is what we want!
else
android.util.Log.d("Location", "Time Device (" + location.getProvider() + "): " + time);
}
public void onStatusChanged(String provider, int status, android.os.Bundle extras) {
}
public void onProviderEnabled(String provider) {
}
public void onProviderDisabled(String provider) {
}
};
if (android.support.v4.content.ContextCompat.checkSelfPermission(context,
android.Manifest.permission.ACCESS_FINE_LOCATION) != android.content.pm.PackageManager.PERMISSION_GRANTED) {
android.util.Log.d("Location", "Incorrect 'uses-permission', requires 'ACCESS_FINE_LOCATION'");
return;
}
locationManager.requestLocationUpdates(android.location.LocationManager.NETWORK_PROVIDER, 1000, 0, locationListener);
locationManager.requestLocationUpdates(android.location.LocationManager.GPS_PROVIDER, 1000, 0, locationListener);
// Note: To Stop listening use: locationManager.removeUpdates(locationListener)
}
GPSから修正を受信するたびに、メソッドonLocationChanged
が呼び出されます。このメソッドのパラメーターは、のインスタンスですLocation
。このパラメータのメソッドの1つは、getTime
探しているものを提供することです。それは私があなたが探しているものを正しく理解した場合です。詳細はこちら
私はこれを言うgetTime関数の説明に出くわしました:
public long getTime()1970年1月1日からのミリ秒単位でこの修正のUTC時刻を返します。デバイスのUTC時刻は単調ではないことに注意してください。予期せず、前後にジャンプする可能性があります。
うわぁ!本当?実際にミリ秒値を含む時間オブジェクトを返したとしても、「予期せず前方または後方にジャンプする可能性がある」場合、その値はTOTALLYUSELESSです。
私が取り組んでいるプロジェクトには、「正確なミリ秒」の時間値が絶対に必要です(「1970年1月1日からのミリ秒」であっても)。その正確さなしで、私はめちゃくちゃです!