1

ユーザーがアプリを開くたびに、ユーザーの現在地を取得しているかどうかを確認します。そうでない場合、アプリは彼に位置情報を有効にしてからアプリに戻るように求めLocationManagerます。問題: 特定の携帯電話では、位置情報が有効になっていてユーザーがアプリに戻った後でも、位置情報がまだnull. そのため、ユーザーはループに陥っています。場所がまだ null であるのはなぜですか? 私に何ができる?

String locationContext = Context.LOCATION_SERVICE;

locationManager = (LocationManager) getSystemService(locationContext);
Location location = locationManager.getLastKnownLocation(locationProvider);

if (location != null) {
  double latitude = location.getLatitude();
  double longitude = location.getLongitude();

  final String lat = String.valueOf(latitude);
  final String lon = String.valueOf(longitude);

  System.out.println("Localisation:  " + lat + " " + lon);

  SharedPreferences preferences = PreferenceManager
      .getDefaultSharedPreferences(getBaseContext());
  String id = preferences.getString("id", null);
  new sendLocation().execute(id, lat, lon);
} else {
  System.out.println("NO LOCATION!!");
  AlertDialog.Builder alert = new AlertDialog.Builder(Home.this);

  alert.setTitle("Get started");
  alert.setMessage("We need your location to detect places nearby. Please enable -Wireless Networks- in your location settings to get started.");

  // Set an EditText view to get user input
  final TextView input = new TextView(Home.this);
  alert.setView(input);

  alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int whichButton) {

      startActivity(new Intent(
          android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));

    }
  });

  alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int whichButton) {
      // Canceled.
    }
  });

  alert.show();
}
4

1 に答える 1

0

Android デバイスでは、ユーザーが携帯電話で位置情報機能を有効にしたときに、位置情報が自動的に更新されるとは限りません。

何らかの場所を確実に取得するにLocationListenerは、1 つまたは複数の更新を登録する必要があります。

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0.0f, this);

そして、「this」であるメインクラスにimplements LocationListenerを追加し、以下のメソッドを追加します。

public void onLocationChanged(Location location) {
    //This "location" object is what will contain updated location data
    //when the listener fires with a location update
}

public void onStatusChanged(String provider, int status, Bundle extras) {
    //Required by LocationListener - you can do nothing here
}

public void onProviderEnabled(String provider) {
    //Required by LocationListener - you can do nothing here
}

public void onProviderDisabled(String provider) {
    //Required by LocationListener - you can do nothing here
}

場所の更新を取得したら、次の方法でリスナーを無効にできます。

locationManager.removeUpdates(this);

LocationListener に関するその他のドキュメント: http://developer.android.com/reference/android/location/LocationListener.html

于 2012-09-24T20:30:04.867 に答える