私は以下のサービスクラスを持っています:LocationService.java
FusedLocationProviderApiの現在のGPS位置が正しくない
public class LocationService extends Service
implements LocationListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
private static final long INTERVAL = 1000 * 60;
private static final long FASTEST_INTERVAL = 1000 * 5;
Location mLastLocation;
private GoogleApiClient mGoogleApiClient;
private LocationRequest mLocationRequest;
String lat, lon;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mGoogleApiClient.connect();
return START_STICKY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onConnected(Bundle bundle) {
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(INTERVAL);
mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
if (mLastLocation != null) {
lat = String.valueOf(mLastLocation.getLatitude());
lon = String.valueOf(mLastLocation.getLongitude());
Util.WriteSharePrefrence(getApplicationContext(), "track_lat", "" + lat);
Util.WriteSharePrefrence(getApplicationContext(), "track_lng", "" + lon);
}
}
@Override
public void onCreate() {
int permissionCheck = ContextCompat.checkSelfPermission(LocationService.this, Manifest.permission.ACCESS_FINE_LOCATION);
if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
//Execute location service call if user has explicitly granted ACCESS_FINE_LOCATION..
buildGoogleApiClient();
}
}
@Override
public void onConnectionSuspended(int i) {
}
synchronized void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
@Override
public void onLocationChanged(Location location) {
if (location != null) {
Util.WriteSharePrefrence(getApplicationContext(), "track_lat", "" + location.getLatitude());
Util.WriteSharePrefrence(getApplicationContext(), "track_lng", "" + location.getLongitude());
}
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
buildGoogleApiClient();
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
私がやっていることは、私が行っていることです。 1.最速の間隔を設定して、5秒ごとに場所を更新します。 2.一度利用可能な場所onLocationChanged()
が行われます。 onLocationChanged()
メソッドの中で私は現在の緯度と経度を共有設定に書いています。 3.このサービスは、現在の場所を取得するためにバックグラウンドで24時間実行されます。
私は以下のように私のマニフェストに両方の場所の条件を記載している:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
私の問題は、次のとおりです。onLocationChanged()
方法は、例えば、間違った緯度経度 を取っ
いくつかの回:インドにおけるユーザデバイスとそれは米国のアドレスを取る。デバイスのバージョンはXolo - 4.2.1.(India)
デバイス固有の問題ですか?私のコードで変更する必要があるものは何ですか? 位置情報サービスをより良くするにはどうすればよいですか?
をしたい場合は、なぜあなたは、通常の場所プロバイダを使用していませんか? GPSやネットワークプロバイダのように –
@Haidar GPSTracker.javaクラスを使用して現在の位置を取得しましたが、現在の位置の場所を頻繁に更新しないと感じました。 – himCream