В настоящее время я встраиваю некоторые функции обнаружения движения в свое приложение.Я не нашел способа постоянно следить за акселерометром, не заставляя телефон все время спать.В попытке преодолеть это, у меня в настоящее время есть Служба, реализующая SensorEventListener.Я могу запускать эту службу через определенные промежутки времени (с помощью диспетчера аварийных сигналов), получать показания от акклерометра устройства, определять, перемещается ли устройство, и затем отключать службу.Обычно это выглядит следующим образом:
public class MyService extends Service implements SensorEventListener {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
/* Register this SensorEventListener with Android sensor service */
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
/* Unregister SensorEventListener */
}
/* SensorEventListener Implementation ************************/
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
/* Receives callback when sensor values change */
@Override
public void onSensorChanged(SensorEvent event) {
/* Determine if moving & then call stopSelf() to shut service down */
}
}
У меня есть еще одна проблема, связанная с тем, что в моем приложении есть вторая служба, которая вызывается по другому расписанию.Насколько я знаю, обе службы будут работать в одном потоке, что не очень хорошо, так как они могут конфликтовать.
Мне нужно знать, есть ли безопасный способ одновременного запуска более чем одной службы в одном приложении .Я рассмотрел использование IntentService вместо стандартного класса обслуживания.Я знаю, что они реализуют свой собственный рабочий поток для обработки вызовов.Проблема в том, что я понятия не имею, как я могу реализовать тип асинхронных обратных вызовов, требуемых SensorEventListener изнутри IntentService.Иными словами, у меня нет гарантии, что метод, подобный onSensorChanged, получит обратный вызов до того, как IntentService завершит свою работу и завершит работу.
Любые предложения по обходу этой проблемы приветствуются.