RequestLocationUpdates Время жизни

81
6

RequestLocationUpdates - метод LocationManager, периодически принимает информацию GPS.

Я думаю, что если я отправлю приложение onCreate, это не будет проблемой, потому что он не будет перезаряжать основной поток, я прав?

Если я хочу получать информацию requestLocationUpdates, даже после закрытия приложения, откуда я должен отправить его?

спросил(а) 2016-03-11T00:22:00+03:00 4 года, 7 месяцев назад
1
Решение
99

В итоге лучшим решением, которое я нашел, было использование Service, как показано ниже:

public class GpsService extends Service implements LocationListener{

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
LocationManager LocManager =(LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
LocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, this);
return Service.START_STICKY;
}

public void onLocationChanged(Location location) {
Log.i("location", String.valueOf(location.getLongitude()));
Log.i("location", String.valueOf(location.getLatitude()));
}

public void onProviderDisabled(String provider) {
Log.i("info", "Provider OFF");
}

public void onProviderEnabled(String provider) {
Log.i("info", "Provider ON");
}

public void onStatusChanged(String provider, int status, Bundle extras) {
Log.i("LocAndroid", "Provider Status: " + status);
Log.i("info", "Provider Status: " + status);
}

}

И в onCreate() я запускаю службу:

public class PacienteApp extends Application {
@Override
public void onCreate() {
Intent intent = new Intent(this, GpsService.class);
this.startService(intent);
}
}

Использование широковещательного приемника - хорошая идея, но трудоемкая, поскольку им не разрешено использовать обработчики в этом классе. И в любом случае вам нужно, чтобы служба работала в фоновом режиме.

ответил(а) 2016-03-11T20:18:00+03:00 4 года, 7 месяцев назад
41

Я думаю, что по большей части вам захочется зарегистрироваться BroadcastReceiver. одна из передач, которую вы можете наблюдать, - это когда местоположение меняется. Есть несколько логистических проблем, связанных с этим, например, как взаимодействовать с BroadcastReceiver и сколько энергии будет потреблять ваше приложение. Хорошее резюме того, как решить эти проблемы, можно найти здесь.

По сути, вы захотите сделать намерение (ваш конкретный способ идентификации события, которое вы искали) и PendingIntent (способ взаимодействия этого события с LocationServices).


PendingIntent launchIntent = PendingIntent.getBroadcast(context, 0, myIntent, 0);
manager.requestLocationUpdates(provider, minTime, minDistance, launchIntent);

ответил(а) 2016-03-11T00:39:00+03:00 4 года, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема