13

利用可能な最良のプロバイダーを取得するためのこのコードがあります

lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

locationListener = new MyLocationListener();
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
String provider = lm.getBestProvider(criteria, true);
Location mostRecentLocation = lm.getLastKnownLocation(provider);
if(mostRecentLocation != null) {
    latid=mostRecentLocation.getLatitude();
    longid=mostRecentLocation.getLongitude();
}
lm.requestLocationUpdates(provider, 1, 0, locationListener);

そしてリスナー

private class MyLocationListener implements LocationListener {

@Override
public void onLocationChanged(Location loc) {
  if (loc != null) {
    latid = loc.getLatitude();
    longid = loc.getLongitude();
    // if(loc.hasAccuracy()==true){
    accuracyd = loc.getAccuracy();
    String providershown = loc.getProvider();    
    accuracy.setText("Location Acquired. Accuracy:"
      + Double.toString(accuracyd) + "m\nProvider: "+providershown);
    accuracy.setBackgroundColor(Color.GREEN);
    // }
    userinfo=usernamevalue+"&"+Double.toString(latid)+"&"+Double.toString(longid);
    submituserlocation(userinfo);
   }
}

デバイス(htc magic)でテストしたところ、GPSが無効になるとすぐにネットワークからロックされることがわかりました。GPS を有効にすると、ネットワークからデータを取得せず、GPS からロックされるまで待機します。
良好な GPS 信号が得られるまで、ネットワークを使用して自分の位置を特定する Google マップのように位置をロックしたいと思います。
最良の基準はそれを行うことだと思いますが、彼らが行うことはプロバイダーを一度選択することです.
私のコードに何か問題がありますか、またはそれを実現するためにスレッドやタイムアウトなどを行う必要がありますか?

4

2 に答える 2

14

ネットワーク プロバイダーと GPS プロバイダーの両方を一定時間リッスンしてから、2 つの結果を確認してみてください。GPS からの結果がない場合は、代わりにネットワークの結果を使用してください。それが私がやった方法です。

于 2010-05-27T08:41:15.640 に答える
3

この他のスレッドのgetBestProvider (Criteria criteria, boolean enabledOnly)ようにLocationManager、基準で使用できるかもしれません。公式ドキュメントを参照してください。

それが役に立てば幸い

于 2012-07-07T18:28:10.050 に答える