记录传感器数据时PARTIAL_WAKE_LOCK

时间:2011-06-27 21:21:28

标签: android sensor

我正在录制传感器数据,如加速度计,方向,陀螺仪。此数据每隔一段时间就会写入一个文件onSensorChanged update。

我的问题是当我将手机置于待机状态时传感器数据停止写入文件。所以我做了一些研究,并决定使用PowerManager并使用唤醒锁

进行设置
  • PARTIAL_WAKE_LOCK:我无法让它发挥作用。
  • SCREEN_DIM_WAKE_LOCK:我的代码将工作正常。 从我读到的内容来看,使用PARTIAL_WAKE_LOCK似乎存在问题。

我似乎无法找到关于它是否存在问题或没有问题的明确答案。我甚至尝试了一些人们建议的黑客方法,例如在屏幕关闭时使用itent捕获,然后取消注册传感器并再次注册它们。但是这个解决方案没有用。从我可以收集的内容来看,如果它能够工作与否,它似乎是不一致的,并且似乎依赖于手机我已经在运行Android2.2的HTC Wildfire和运行Android2.3的Nexus S上尝试了我的代码。

我的应用程序是一个基本上在后台运行并且运行时间很长的应用程序。因此,PARTIAL_WAKE_LOCK对电池寿命很重要。

2 个答案:

答案 0 :(得分:3)

这仅定义为Android 2.3版本。在此之前,平台将在屏幕关闭时明确关闭所有传感器,以减少电池使用。

答案 1 :(得分:0)

这是一个非常古老的问题,我仍然会回答它,因为今天的所有设备都超出了2.3

创建后台服务并以下列方式使用部分锁定唤醒:

首先处理权限(在清单文件中):

<uses-permission android:name="android.permission.WAKE_LOCK" />

然后,最好在应用程序文件或任何地方使用它:

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                "MyWakelockTag");
if(/*condition*/) {
    wakeLock.acquire(); //keep CPU awake
} else {
    wakeLock.release(); //disable keep CPU awake
}

虽然这是一个非常酷的功能,它会耗尽您的电池寿命,因此负责任地使用它。