java - 永久 SensorEventListener 震动

标签 java android

我想在检测到摇动事件时启动应用程序的 Activity 。我希望这发生在我的应用程序之外。

有很多很棒的代码 fragment herehere例如,如何正确实现SensorEventListener ,但即使我不取消注册监听器,它仍然会被销毁。

如何防止它被破坏并注册一个“永久”监听器?我在任何地方都找不到任何此类示例...任何链接或指导将不胜感激。

最后,我如何才能在显示器打开时只监听此类事件?我知道这可能是hardware restriction无论如何。

提前致谢。

最佳答案

您可以注册 BOOT_COMPLETED intent 的广播接收器并在 onReceive使用 PARTIAL_WAKELOCK 启动后台服务然后注册您的传感器事件监听器。像这样的事情:

@Override
public int onStartCommand(Intent i, int flags, int startId) {
    acquireWakeLock();
    registerSensorListener();
    return START_STICKY;
}

@Override
public void onDestroy() {
    unregisterSensorListener();
    releaseWakeLock();
    super.onDestroy();
}

private void acquireWakeLock() {
    try {
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        if (pm == null) {
            Log.e(TAG, "Power manager not found!");
            return;
        }
        if (wakeLock == null) {
            wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getPackageName());
            if (wakeLock == null) {
                Log.e(TAG, "Could not create wake lock (null).");
                return;
            }
        }
        if (!wakeLock.isHeld()) {
            wakeLock.acquire();
            if (!wakeLock.isHeld()) {
                Log.e(TAG, "Could not acquire wake lock.");
            }
        }
    } catch (RuntimeException e) {
        Log.e(TAG, "Caught unexpected exception: " + e.getMessage(), e);
    }
}

private void releaseWakeLock() {
    if (wakeLock != null && wakeLock.isHeld()) {
        wakeLock.release();
        wakeLock = null;
    }
}

希望这有帮助。

关于java - 永久 SensorEventListener 震动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11065414/

相关文章:

java - 使用反射访问父类(super class)的隐藏字段

java - 在用户社交网络中找到前 k 个喜欢

java - 带有 SWT.VIRTUAL 的 SWT 表引发 StackOverflowError

Android应用程序支持除android之外的所有平台

Java - "Unhandled exception type IOException"

java - 在 Java 中获取第三方库版本

java - 在android中启动应用程序时初始化SQL

java - 基于子字符串过滤数据库结果在android中

android - viewPager 和数据绑定(bind) android

android - 为什么 ASUS Transformer Prime 是唯一出现内存不足异常的设备