Здесь я прочитал много вопросов, но не смог понять, в чем проблема.
Я пишу приложение для полевого сервиса для Android.В одном из занятий (MyActivity.java) у меня есть две кнопки: Пуск и Стоп.
Когда полевой рабочий нажимает на старт, мне нужно получить его текущее местоположение с помощью GPS и отправить его на сервер через определенные промежутки времени (скажем, по умолчанию это 5 минут, здесь я установил его на 20 секунд для тестирования).Заказчик хочет, чтобы он видел, как долго рабочие проводят время в пробках, в моем городе (Стамбул) трафик беспорядок.
У меня в работе AlarmManager, когда нажата кнопка запуска, сигнализацияустановлено AlarmManager.setRepeating()
для запуска службы (ServiceClass.java).
Intent intent = new Intent (MyActivity.this, ServiceClass.class);
mPendingIntent = PendingIntent.getService(MyActivity.this, 0, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mAlarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 20*1000,
mPendingIntent);
Я отменяю Тревогу кнопкой Стоп.
Работает до тех пор, пока Сервис не запустится.Методы onCreate()
, onStart()
и onDestroy()
выполняются.Но я не могу получить местоположение.Я не работаю на реальном устройстве, поэтому я использую DDMS для отправки местоположений.Но приложение пропускает этот шаг и печатает Долготу и Широту моего местоположения как Lon: 0 Lat: 0.
Вот код внутри службы:
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.d("Testing", "Service got started, calling location updates:");
mLocationManager.requestSingleUpdate(mCriteria, mLocationListener,
getMainLooper());
Log.i("TESTING LOCATION UPDATE: LOCATION:", "\nLat:" + mLatitude +
" Lon:" + mLongitude);
stopSelf(startId);
Log.d("Testing", "Service Stopped!");
И, наконец, вот мой LocationListener:
mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
if(location != null){
mLatitude = location.getLatitude();
mLongitude = location.getLongitude();
Log.i("onLocationChanged(Location location)", "Lat:"+mLatitude + "
Lon:" + mLongitude);
}
Также что-то попалось на глаза, когда я запускаю код:
mLocationProvider = mLocationManager.getBestProvider(mCriteria, true);
Log.i("BEST PROVIDER IS:", mLocationProvider);
Там написано, что ЛУЧШИЙ ПОСТАВЩИК: gps.Но этот журнал внутри onProviderEnabled () никогда не отображается в logcat.
@Override
public void onProviderEnabled(String s) {
Log.v("onProviderEnabled", "ENABLED");
}
Две вещи, которые нужно добавить, если я использую:
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
mLocationListener);
, он тоже не работает.
Это, однако, работает, и я могу получить LastKnownLocation:
Location lastKnown = mLocationManager.getLastKnownLocation(
LocationManager.GPS_PROVIDER);
Прежде всего, это хороший подход для этого?Если это так, пожалуйста, проверьте, что мне не хватает.Если это не так, скажите, пожалуйста, как я могу реализовать это лучше?
Спасибо.:)