Как получить широту и долготу в Android?

Как получить текущую широту и долготу в Android2.3.3?

Я стараюсь следоватьэтот но я не могу запускать программы.

Мой код

    LatView = (TextView)findViewById(R.id.LatText);
    LngView = (TextView)findViewById(R.id.LngText);
    LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    double longitude = location.getLongitude();
    double latitude = location.getLatitude();

В андроид манифест я положил это.

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

Пожалуйста помоги. Благодарю.

 nhaarman28 июн. 2012 г., 20:50
Опубликовать logcat, если приложение вылетает.
 Dheeresh Singh28 июн. 2012 г., 21:01
Некоторое время система возвращает getLastKnownLocation как ноль, поэтому location.getLongitude () выдаст исключение нулевого указателя
 Uku Loskit28 июн. 2012 г., 20:49
не может работать? в чем ошибка?
 jerrylroberts28 июн. 2012 г., 20:53
Тестируете ли вы на симуляторе, если это так, вам нужно перейти в перспективу DDMS в затмении, чтобы передать координаты местоположения в симулятор для тестирования. Он не будет генерировать случайные из них на лету.
 KristianMedK29 июн. 2012 г., 08:54
как говорят Джерробертс, симулятору нужно, чтобы вы подделали какое-то место. Тем не менее, эта функция ddms довольно ошибочна, по крайней мере, когда я работал с ней, использование реального устройства на сегодняшний день является лучшим при работе с gps.

Ответы на вопрос(2)

Это то, что я имею в своем приложении, чтобы найти текущее местоположение устройства, оно отлично работает:

public class MyLocationActivity extends Activity implements LocationListener {
    private LocationManager mgr;
    private String best;
    public static double myLocationLatitude;
    public static double myLocationLongitude;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mgr = (LocationManager) getSystemService(LOCATION_SERVICE);

        dumpProviders();

        Criteria criteria = new Criteria();

        best = mgr.getBestProvider(criteria, true);
        Log.d("best provider", best);

        Location location = mgr.getLastKnownLocation(best);
        dumpLocation(location);

            //may be some intent here
    }

    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
        dumpLocation(location);

    }

    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

    @Override
    protected void onPause() {

        super.onPause();
        mgr.removeUpdates(this);
    }

    @Override
    protected void onResume() {

        super.onResume();
        mgr.requestLocationUpdates(best, 15000, 1, this);
    }

    private void dumpLocation(Location l) {

        if (l == null) {

            myLocationLatitude = 0.0;
            myLocationLongitude = 0.0;
        } else {

            myLocationLatitude = l.getLatitude();
            myLocationLongitude = l.getLongitude();
        }
    }

    private void dumpProviders() {

        List<String> providers = mgr.getAllProviders();
        for (String p : providers) {

            dumpProviders(p);
        }
    }

    private void dumpProviders(String s) {

        LocationProvider info = mgr.getProvider(s);
        StringBuilder builder = new StringBuilder();
        builder.append("name: ").append(info.getName());
    }

}

Здесь MyLocationLatitude и MyLocationLongitude дают значения lat и long, которые вам нужны.

 MaximumBua02 июл. 2012 г., 16:57
Я примеряю эмулятор и мобильный телефон.
 04 июл. 2012 г., 00:16
@ Archie.bpgc Вы должны указать координаты для эмулятора с помощью telnetting & quot; географической фиксированной широты и долготы & quot; команда, как объяснено здесь:stackoverflow.com/q/2279647/329079
 03 июл. 2012 г., 06:59
на эмуляторе он не работает, он всегда дает 0.0, 0.0 для широты и долготы текущего местоположения устройства .... но работает ли он на устройстве? ... если нет, то вы должны отлаживать, где он идет не так, потому что тот же код у меня отлично работает
 02 июл. 2012 г., 10:25
вы пытаетесь это на эмуляторе?
 MaximumBua29 июн. 2012 г., 19:29
Я следую этому коду каждую строку, но ответа не имею.

Вам нужно проверить, является ли последнее местоположение нулевым, если это так, то вы спрашиваете у провайдера GPS о новом местоположении, например:

public class Example extends Activity implements LocationListener {
    LocationManager mLocationManager;

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

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

        Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if(location != null && location.getTime() > Calendar.getInstance().getTimeInMillis() - 2 * 60 * 1000) {
            // Do something with the recent location if it is less than two minutes old
        }
        else {
            // Request a new location if necessary
            mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
        }
    }

    public void onLocationChanged(Location location) {
        if (location != null) {
        // Do something withthe current location

        // If you only want one location update un-comment this line
        //mLocationManager.removeUpdates(this);
        }
    }

    public void onProviderDisabled(String arg0) {}
    public void onProviderEnabled(String arg0) {}
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
}

Ваш ответ на вопрос