我的IntentService如何在后台始终听取设备的震动?

时间:2014-03-02 09:46:01

标签: android accelerometer sensor intentservice background-service

我正在开发一个基本上是一个小部件和一个服务的应用程序。 小部件只是一个按钮,我希望它在设备的后台运行服务。 因此,用户只需单击按钮,UI中就不会发生任何事情,服务将在后台启动。 但是我希望我使用IntentService实现的后台服务总是在单击小部件按钮后在后台监听我的设备的抖动。它必须随时监控加速计传感器的任何变化。 最后,如果用户摇动他的设备,我想打开某个应用程序。

我已经实现了widget部分,我单击按钮并运行服务。我也实现了摇动部分,我可以摇晃并在摇动后做一些事情。我也知道如何在震动后打开另一个应用程序。我只是不能通过服务做到这一点!所以我的问题是:

  • 我是否必须使我的IntentService类实现SensorEventListener?
  • 如果是,只有这个实现足以让它随时听传感器吗?我应该怎么做onHandleIntent(Intent intent)呢?!
  • 如果在常规活动中实现,则会在onSensorChanged(SensorEvent sensorEvent)中监听所有传感器更改。这是否意味着我必须将所有内容都放在该功能中? onHandleIntent中没有任何内容?
  • 我也有这个意图,来自我的小部件到我的服务,我不知道该怎么办!我已经使用该intent启动了intentService,但是如果我不使用onHandleIntent,我无法为我的意图传递setAction,那么它就没用了!

我已经回顾了这个问题:["Shake" app to respond at any time]但我没有详细了解该服务如何在后台收听。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

您可以同时使用ServiceIntentService。在这里,我给出了一个适合你的方法。对于ServiceIntentService之间的差异,请点击this链接。

public class service extends Service implements SensorEventListener {
@Override

public void onCreate() {
    super.onCreate();
//register your sensor manager listener here
}

@Override
public void onDestroy() {
//unregister your listener here
}

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        //detect the shake and do your work here
    }

}