2012-06-28 5 views
3

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

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

Мой код

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" /> 

Пожалуйста, помогите. Спасибо.

+0

не может работать? Какая ошибка? –

+0

Сообщение logcat, если приложение выходит из строя. – nhaarman

+0

Испытываете ли вы на симуляторе, если вам нужно перейти в перспективу DDMS в eclipse, чтобы передать координаты местоположения в симулятор для тестирования. Он не будет генерировать случайные «на лету». – jerrylroberts

ответ

2

Вы должны проверить, если последнее место имеет нулевое значение, если после этого вы спросите поставщик 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) {} 
} 
3

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

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 приведены значения широты и долго вам нужно.

+0

Я следую этому коду каждой строке, но не отвечаю. – MaximumBua

+0

Вы пытаетесь это сделать на эмуляторе? –

+0

Я пытаюсь на эмулятор и на мобильный телефон. – MaximumBua

Смежные вопросы