6

奇妙な問題が発生しました。Wi-Fiを使用してユーザーの場所を取得します。私はいくつかの電話でテストしました。それらのいくつかでは、私は場所の更新を取得できませんでした。onLocationChangedメソッドが呼び出されることはないようです。私のコードは以下に添付されています。

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

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

  String provider = locationManager.NETWORK_PROVIDER;
  Location l = locationManager.getLastKnownLocation(provider);

  updateWithNewLocation(l);

  locationManager.requestLocationUpdates(provider, 0, 0,
                                       locationListener);
}

private void updateWithNewLocation(Location location) {
  TextView myLocationText;
  myLocationText = (TextView)findViewById(R.id.myLocationText);

  String latLongString = "No location found";
  if (location != null) {
    double lat = location.getLatitude();
    double lng = location.getLongitude();
    latLongString = "Lat:" + lat + "\nLong:" + lng;
  }

  myLocationText.setText("Your Current Position is:\n" +
                       latLongString);
}

private final LocationListener locationListener = new LocationListener() {
  public void onLocationChanged(Location location) {
    updateWithNewLocation(location);
    Log.i("onLocationChanged", "onLocationChanged");
    Toast.makeText(getApplicationContext(), "location changed", 
            Toast.LENGTH_SHORT).show();
  }

public void onProviderDisabled(String provider) {}
public void onProviderEnabled(String provider) {}
public void onStatusChanged(String provider, int status, 
                            Bundle extras) {}

};

マニフェスト

<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"
/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/> 
4

5 に答える 5

2

私の推測では、位置情報が更新されない携帯電話には適切なデータ接続がありません。ネットワーク プロバイダは、携帯電話のセル/Wi-Fi データを使用して Google サーバーから位置情報の修正を取得するために、GSM/3G または Wi-Fi データ接続を必要とします。これを確認するには、以下の方法を使用できます。

public boolean isOnline() {
ConnectivityManager cm =
    (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
    return true;
}
return false;

}

于 2012-07-02T20:32:17.280 に答える
0

私はまったく同じ問題を抱えていましたが、「現在」と同じものがあるonLocationChanged場合は呼び出されません。getLastKnownLocationつまり、報告する新しいものがないため、新しい場所を取得できないことを意味します...解決策は、非常に古い場合でも最後に既知の場所を使用することです (より正確な/新しい場所が必要な場合は、更新をリッスンし続けます (そのような場合)発生します))。

于 2012-12-23T16:55:41.513 に答える
0

onProviderDisabled メソッドがすぐに呼び出されていないことを確認してください。

プロバイダーが登録するとすぐに呼び出されていることがわかった場合は、使用している電話で位置情報サービスが無効になっていることを意味します.

于 2012-06-25T03:24:03.127 に答える
0

私も(4.0)NetworkProviderでテスト中に同じ問題に直面しましたが、古いバージョン(テストした2.2および2.3.3)では正常に動作しました。ICSこれが私が見つけた解決策であり、ICSうまく機能しています。Criteria以下のように、位置情報の更新を取得するために を使用してください。

 LocationManager locationManager= (LocationManager) <YourAct>
            .getSystemService(Context.LOCATION_SERVICE);
 Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_COARSE);  //ACCURACY_COARSE or ACCURACY_FINE based on usage

    String provider = locationManager.getBestProvider(criteria, true);
    // Register the listener with the Location Manager to receive location
    // updates
    locationManager.requestLocationUpdates(provider, 0, 0, locationListener);

上記のようにコードを置き換えます。これは、場所の更新を取得するのに役立ちます。

于 2012-12-12T06:04:22.627 に答える
0

Google 位置情報サービスが特定の地域でダウンしていたのではないかと今では疑っています。私のアプリは、コード (Play ストアの apk) を変更することなく、再び機能し始めました。

于 2012-12-11T18:08:09.750 に答える