にわたって変動し、私が使用するAPIのいくつかは、私が戻ってくるまでに廃止予定ます。
GPS APIの変更が最も顕著です。私を混乱させるのは、古いAPIがはるかに優れた結果を出すように見えることです(コードは続く)。
私はMapViewのを使用し、また古い方法(別々のGPS &ネットワークprovders)と新しい方法(「FusedLocation」)と、プログラムのGPS COORDSを取得しています。
IがGoogleマップで両方のコードの座標を比較し、古いコード(seperatly GPS &ネットワークプロバイダを使用して)は、正確で安定であるが、( 『FusedLocation』を使用して)新しいコードは、定常数hunderedメートルオフでありませんmapViewが指し示す場所に一致します(つまり、それらが正確でなく、変化し続けることを意味します)。GPSの結果は古いものと新しいAPI
私の質問はです。どちらの方法が正しいですか? FusedLocationを間違ってコーディングしているかもしれないと思っていたかもしれませんが、MapViewと一致しているので、私はこれを却下しました。 GPSを使用して
古いコードは、seperatly &ネットワーク:
public Location getLocation() {
locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE);
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if(!isGPSEnabled && !isNetworkEnabled) {
} else {
this.canGetLocation = true;
if (isGPSEnabled) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
}
if(isNetworkEnabled) {
if(location == null) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if(locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
}
}
}
新しいコード、FusedLocationを使用して:
protected synchronized void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(context)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
public boolean canGetLocation() {
boolean isGPSEnabled = false;
boolean isNetworkEnabled = false;
try {
LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
isGPSEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkEnabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception e) {
e.printStackTrace();
return false;
}
//some more code
}
public void onConnected(Bundle bundle) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}
* * ...何のため?正確な位置を得るために?それらのうちのどれか...あなたはリスナーをセットアップし、プロバイダの修正を待つべきです... androidhiveのもう一つの "素晴らしい"コードのようです。 – Selvin
hahaha androidhive rules 'locationManager.requestLocationUpdates(...); if(locationManager!= null){...} 'あなたが一度メソッドを呼び出した直後に、' locationManager'がnullであるかどうかを確認するポイントは何ですか?あまりにも遅いです...もし 'locationManager'がNPEの前にNPE行を取得するのであれば、 – Selvin
のコードを嘲笑するのではなく、もっと古いコーディングサンプルを参照することができますか?それが実際より正確である理由を理解するのを手助けしようとしていますか? –