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

标签 android accelerometer sensors intentservice background-service

我正在开发一款基本上由一个小部件和一项服务组成的应用程序。 小部件只是一个按钮,我希望它在设备的后台运行服务。 所以用户只需点击按钮,UI 中什么也没有发生,服务在后台启动。 但是我希望我使用 IntentService 实现的后台服务在单击小部件的按钮后始终在后台收听我的设备的震动。它必须随时监控加速度计传感器是否有任何变化。 最后,如果用户摇动他的设备,我想打开某个应用程序。

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

  • 我是否必须让我的 IntentService 类实现 SensorEventListener?
  • 如果是,仅此实现是否足以使其始终监听传感器?那我应该在 onHandleIntent(Intent intent) 中做什么?!
  • 如果在常规 Activity 中实现,则所有传感器更改都将在 onSensorChanged(SensorEvent sensorEvent) 中监听。这是否意味着我必须将所有内容都放在该函数中? onHandleIntent 中没有任何内容?
  • 我也有这个 Intent ,从我的小部件到我的服务,我不知道该怎么做!我已经使用该 Intent 启动了 intentService,但如果我不使用 onHandleIntent,我就无法为我的 Intent 传递 setAction,所以它毫无用处!

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

有人能帮忙吗?

最佳答案

您可以同时使用 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
    }

}

关于android - 我在后台的 IntentService 如何始终监听设备的震动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22126062/

相关文章:

android - 图像内的图像检测

java - Android - Activity 构造函数

ios - 在 iOS 中以度数或弧度在 Y 轴上旋转

ios - 在 XCode 中使用加速度计模拟器

java - 如何在翻转手机时更改神奇8球答案?

Android 传感器 : getRotationMatrix() returns wrong values, 为什么?

c - 超声波传感器与 AVR 接口(interface)

filter - 卡尔曼滤波器具有完整的数据集?

android - 将无限次调用的回调转换为 Observable

android - 在 Android 中播放波形文件