新しいナビゲーションアプリのユーザーの場所を取得しようとしています。ユーザーの場所を頻繁に確認したいのですが、正確である必要があります。サンプルの次のコードを使用して場所を取得します。
public class MainActivity extends Activity implements LocationListener {
private LocationManager locationManager;
private String provider;
private TextView a;
private TextView b;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
a = (TextView) findViewById(R.id.a);
b = (TextView) findViewById(R.id.b);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(provider);
if (location != null) {
System.out.println("Provider " + provider + " has been selected.");
onLocationChanged(location);
} else {
a.setText("Location not available");
b.setText("Location not available");
}
}
@Override
protected void onResume() {
super.onResume();
locationManager.requestLocationUpdates(provider,0, 1, this);
}
@Override
protected void onPause() {
super.onPause();
locationManager.removeUpdates(this);
}
@Override
public void onLocationChanged(Location location) {
Double lat = location.getLatitude();
Double lng = location.getLongitude();
a.setText(String.valueOf(lat));
b.setText(String.valueOf(lng));
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
Toast.makeText(this, "Enabled new provider " + provider,
Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderDisabled(String provider) {
Toast.makeText(this, "Disabled provider " + provider,
Toast.LENGTH_SHORT).show();
}
}
しかし、私が移動しても場所の座標は更新されません、私は常に一定の値を取得します...場所を取得するためのより良い方法はありますか? Android docsによると、GooglePlayロケーションサービスまたはAndroidプラットフォームロケーションAPIを使用できます。両方のサンプルコードを確認し、LocationListenerを実装しています。ユーザーの場所を取得するためのインターフェイス。では、実際の違いは何ですか?
絶対に新しいグーグルプレイロケーションサービスを使用してください。彼らは古いロケーションマネージャーよりも屋内ではるかにうまく機能します。新しいGooglePlayの位置情報サービスを使用し、定期的にバックグラウンドで動作するサンプルを作成しました。見てみな:
https://github.com/nickfox/GpsTracker/tree/master/phoneClients/Android
私がそれを扱っていたとき、私は2つの良い情報源に出くわしました:
ブログ投稿: Android Location Fused Provider 。 FusedLocationProviderApi を使用してAndroidで位置情報を取得するための優れた完全なチュートリアルが含まれています。
基本的に、どちらもGoogle I/Oセッションで言及されているのと同様の手順について話します。そのリンクは、回答の1つに記載されています。
まず、次のようにGoogleClientApi
インスタンスを取得します。
_GoogleClientApi googleApiClient = new GoogleApiClient.Builder(locationActivity)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
_
次に、次のように.connect()
を呼び出します。
_googleApiClient.connect();
_
次に、コールバックonConnected
で、最後の場所を取得するか、必要に応じて場所の更新をリクエストすることもできます。例:
_LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
_
場所の更新をリクエストする場合は、 requestLocationUpdates 呼び出しを使用できます。
それが役に立てば幸い。