Итак, я использую метод getLastKnownLocation, чтобы получить локатор местоположения устройства, но он возвращает значение null, если нет исправления GPS. Есть ли способ отложить выполнение getLastKnownLocation, пока у GPS не будет допустимого местоположения?
package test.example;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
public class testGPS extends Activity
{
private LocationManager lm;
private LocationListener locationListener;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
//---use the LocationManager class to obtain GPS locations---
lm = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
locationListener = new MyLocationListener();
lm.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
0,
0,
locationListener);
Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (loc != null) {
tv.setText("Hello, lat is " + loc.getLatitude() + " lon is " + loc.getLongitude());
setContentView(tv);
} else {
tv.setText("Hello, loc is null :(");
setContentView(tv);
}
}
private class MyLocationListener implements LocationListener
{
@Override
public void onLocationChanged(Location loc) {
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
// TODO Auto-generated method stub
}
}
}
Вы не понимаете, как работает местоположение на Android. getLastKnownLocation() не предоставляет значение null, если GPS не имеет исправления, он возвращает null, если нет ранее известного местоположения - местоположение не должно поступать из GPS (оно может поступать через Wi-Fi или мобильную сеть) и вызывает этот метод не инструктировать структуру местоположения для возврата нового местоположения.
Вам нужно начать заново, после полного чтения и понимания этой страницы: http://developer.android.com/guide/topics/location/obtaining-user-location.html
Он включает в себя все, что вам нужно для обработки местоположений на Android, и вам нужна инфраструктура, соответствующая потребностям вашего приложения. Если вы хотите, чтобы местоположение сохранялось (чтобы уменьшить использование GPS), вы можете сохранить местоположение в настройках и/или включить отправку сетевого местоположения (не так точно, но обычно быстрее). Для некоторых приложений вы можете быстро получить грубое местоположение (используя последний известный или поставщик сетевого местоположения), а затем обновить его, когда поступит точное местоположение GPS. Но подход, который вы используете, зависит от приложения.