我目前正在将一些运动检测功能构建到我的应用程序中。我还没有找到一种方法来持续监控加速度计,而不必始终保持手机的清醒状态。在试图克服这一点时,我目前有一个实现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而不是标准的Service类。我知道这些实现他们自己的工作线程来处理调用。问题在于我不知道如何从IntentService中实现SensorEventListener所需的异步回调类型。换句话说,我不能保证像onSensorChanged这样的方法会在IntentService完成其工作并关闭之前收到回调。
有关解决此问题的任何建议都非常感谢。
您应该将Commons的答案标记为正确答案。 :) – accordionfolder 2012-03-14 18:56:57