Android GPS только первое изменение местоположения приводит к onLocationChanged, почему? - PullRequest
0 голосов
/ 16 августа 2011

Я все еще тестирую функциональность Android-GPS и получил свой Eclipse для доставки одного местоположения onCreate() с getLastKnownLocation() и одного события onLocationChanged(). Но когда я отправляю дальнейшие изменения местоположения с помощью команды geo fix интерфейса telnet, я не получаю никаких дальнейших вызовов событий. Что может быть причиной этого?

Мой вывод подразумевает, что он начинает прослушивать изменения после запуска приложения (есть событие GpsStatus.GPS_EVENT_STARTED), а затем после получения обновления местоположения он автоматически прекращает прослушивание (происходит событие GpsStatus.GPS_EVENT_STOPPED).

За подробностями обращайтесь и посмотрите на мой код:

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

    LocationManager l =(LocationManager) getSystemService(Context.LOCATION_SERVICE);
    List<String> li = l.getAllProviders();
    for (Iterator<String> iterator = li.iterator(); iterator.hasNext();) {
            String string =  iterator.next();
            Log.i(TAG, string);
    }
    if (l.getLastKnownLocation("gps")==null)
        Log.i(TAG, "null"); 
    else{            
        Log.i(TAG, l.getLastKnownLocation("gps").toString());
    }

    l.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}

...

@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
    String txt = "onStatusChanged:"+arg0+":";
    switch(arg1){
        case GpsStatus.GPS_EVENT_FIRST_FIX:
            txt += "first fix";
            break;
        case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
            txt += "sat status";
            break;
        case GpsStatus.GPS_EVENT_STARTED:
            txt += "event started";
            break;
        case GpsStatus.GPS_EVENT_STOPPED:
            txt += "event stopped";
    }
    Log.i(TAG, txt);
}

...

@Override
public void onLocationChanged(Location arg0) {
    Log.i(TAG, "onLocationChanged:" +arg0.toString());
}

и вот манифест:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.mypackage.example.gps"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="3" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".gpsActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
        </activity>
    </application>
</manifest>

Ответы [ 2 ]

1 голос
/ 16 августа 2011

Обходной путь для версии 1.5 SDK включен в отчет об ошибке.

In the emulator, on the Home Screen, press "Menu" -> "Settings" -> "Date & Time" -> Uncheck "Automatic" -> "Select Time Zone", and choose the right time zone (ie, yours). 

подробнее см. Этот вопрос «В Eclipse перестают работать добавленные вручную обновления местоположений» .

1 голос
/ 16 августа 2011

Поместите ваш код обновления местоположения в метод onResume ..

, например,

@Override
   public void onResume() {
      super.onResume();
           locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000L,1.0f, this);
    locationManager.requestLocationUpdates(
            LocationManager.NETWORK_PROVIDER, 1000L, 1.0f, this);
    locationManager.addGpsStatusListener(this);

}

А также дает параметры, такие как время в миллисекундах и расстояние в числах с плавающей запятой.

Надеюсь, это поможет вам.

Если вы найдете этот ответ полезным, пожалуйста, проголосуйте за других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...