質問

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

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からロックするまで待機します。
Googleマップのような位置をロックしたいと思います。これは、Googleマップが優れたGPS信号を設定するまで、ネットワークを使用して私の場所を決定することです。
私は最良の基準がそれを行うでしょうが、彼らがしていることはプロバイダーを一度選ぶことです。
私のコードに何か問題がありますか、それを実現するためにスレッドやタイムアウトなどをしなければなりませんか?

役に立ちましたか?

解決

たぶん、ネットワークプロバイダーとGPSプロバイダーの両方を一定の時間聴いてみて、2つの結果を確認することができます。 GPSの結果がない場合は、代わりにネットワーク結果を使用してください。それが私がそれをした方法です。

他のヒント

多分あなたは使用することができます getBestProvider (Criteria criteria, boolean enabledOnly)LocationManager のように基準があります この他のスレッド。を参照してください 公式文書.

それが役に立てば幸い

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top