2010-05-02 5 views
0

ВнутриПолучение данных GPS?

public class IAmHere extends Activity implements LocationListener { 

я есть

@Override 
public void onLocationChanged(Location location) { 
    // TODO Auto-generated method stub 

} 

@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 

} 

и

внутри

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.iamhere); 

я есть

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  
    List<String> providers = lm.getProviders(true); 

    /* Loop over the array backwards, and if you get an accurate location, then break out the loop*/ 
    Location l = null; 

    for (int i=providers.size()-1; i>=0; i--) { 
      l = lm.getLastKnownLocation(providers.get(i)); 
      if (l != null) break; 
     } 

     double[] gps = new double[2]; 
     if (l != null) { 
      gps[0] = l.getLatitude(); 
      gps[1] = l.getLongitude(); 
     } 

     gpsString = (TextView)findViewById(R.id.gpsString); 

    String Data = ""; 
    String koordinata1 = Double.toString(gps[0]); 
    String koordinata2 = Double.toString(gps[1]); 
    Data = Data + koordinata1 + " | " + koordinata2 + "\n"; 
    gpsString.setText(String.valueOf(Data)); 

но кажется, что он не работает? Зачем? Я имею в виду, что даже эмулятор не хочет отправлять данные GPS. Когда я нажимаю «отправлять» через интерфейс или консоль, ничего не происходит ...?

спасибо.

ответ

1

Во-первых, вы внедрили LocationListener на IAmHere, а затем ничего не сделали с этим интерфейсом.

Во-вторых, вы вызываете getLastKnownLocation(), но вы ничего не делаете, чтобы инициировать Android для начала сбора данных о местоположении на любом провайдере.

Эти две проблемы связаны.

Услуги определения местоположения отключены, пока что-то не зарегистрируется, чтобы получить данные о местоположении из них. Как правило, это через requestLocationUpdates() на LocationManager ... который использует интерфейс LocationListener, который вы внедрили.

Рецепт для использования LocationManager является:

  1. Зарегистрировать LocationListener через requestLocationUpdates()
  2. Разрегистрируйте LocationListener когда-нибудь (например, onDestroy()), так что вы не утечка памяти
  3. Когда исправления местоположения вступают в onLocationChanged(), сделать что-нибудь полезное

Here is a sample project, который использует LocationManager и LocationListener таким образом.

+0

Я сделал именно это, но я все время теряю утечку памяти, когда я выхожу и снова запускаю свою деятельность (т. Е. Потребляет все большее количество памяти до сбоя). Есть ли что-то еще, что нужно сделать, чтобы предотвратить это? –

+0

@kelmer: Используйте MAT, чтобы определить, где вы протекаете. – CommonsWare

+0

Я не использовал MAT, но если я прокомментирую строку mgr.requestLocationUpdates (bestProvider, 0, 0, onLocationChange); Я больше не просачиваюсь (узнал об этом через линии logCat GC_CONCURRENT) –

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