相关疑难解决方法(0)

屏幕关闭时,Android加速度计无法正常工作

我正在为计算机科学的最终论文开发一个应用程序,我需要收集并记录加速度计数据.我需要一整天才能获得它,因此存在严重的电池限制(例如,我无法启动屏幕).此外,这不是一个以市场为目标的应用程序,因此如果需要,做一些严重的黑客攻击,甚至低级C/C++编码是完全可以接受的.

众所周知,在许多设备上,加速计事件的监听器在屏幕关闭时停止生成事件(关于此问题的一些链接:http://code.google.com/p/android/issues/detail?id = 3708,加速度计当Droid/Nexus One屏幕关闭时,即使使用WakeLock,也会停止传送样本.我已经彻底搜索了一些替代方案,其中一些包括对我的设备不起作用的解决方法(LG P990,股票ROM).

所以会发生这样的事情:当你在服务中为android加速计传感器注册事件监听器时,它可以正常运行,直到屏幕关闭.我已经尝试在IntentService上的服务上注册eventListener,试图获取WakeLocks.关于唤醒锁,我可以验证服务是否仍在运行,观察LOGcat输出,但似乎加速度计进入睡眠模式.某些链接中提供的解决方法之一是使用IntentService的线程定期取消注册和重新注册事件侦听器,如下面的代码片段所示

synchronized private static PowerManager.WakeLock getLock(Context context) {
    if (lockStatic==null) {
        PowerManager mgr=(PowerManager)context.getSystemService(Context.POWER_SERVICE);

        lockStatic = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,NAME);
        lockStatic.setReferenceCounted(true);
    }

    return(lockStatic);
}

@Override
protected void onHandleIntent(Intent intent) {

     sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);
     sensorManager.unregisterListener(this);
     sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);


    synchronized (this) {
        boolean run = true;
        while (run){
            try {
                wait(1000);
                getLock(AccelerometerService.this).acquire();
                sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);
                sensorManager.unregisterListener(this);
                sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
                Log.d("Accelerometer service", "tick!");

            } catch (Exception e) {
                run = false;
                Log.d("Accelerometer service", "interrupted; cause: " …
Run Code Online (Sandbox Code Playgroud)

android screen sensor accelerometer

68
推荐指数
2
解决办法
2万
查看次数

即使使用WakeLock,当Droid/Nexus One屏幕关闭时,Accelerometer也会停止提供样品

我有一些代码可以扩展服务并在Android上记录onSensorChanged(SensorEvent事件)加速计传感器读数.我希望能够记录这些传感器读数,即使设备关闭(我对电池寿命非常小心,并且在运行时显而易见).虽然屏幕上的日志工作正常,但在2.0.1 Motorola Droid和2.1 Nexus One上.

但是,当手机进入休眠状态时(通过按下电源按钮),屏幕关闭,onSensorChanged事件停止传送(每隔N次使用一次Log.e消息进行验证onSensorChanged).

该服务获取wakeLock以确保它在后台运行; 但是,它似乎没有任何影响.我已经尝试了各种各样的PowerManager.唤醒锁,但它们似乎都不重要.

_WakeLock = _PowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
_WakeLock.acquire();
Run Code Online (Sandbox Code Playgroud)

关于在屏幕关闭时你是否能真正从传感器获取数据的报道相互矛盾......任何人都对更现代版的Android(Eclair)和硬件有任何经验吗?

这似乎表明它在Cupcake中工作:http: //groups.google.com/group/android-developers/msg/a616773b12c2d9e5

PS:完全相同的代码在G1上的1.5中按预期工作.当屏幕关闭,应用程序在后台等时,记录继续.

android accelerometer power-management android-2.0-eclair

25
推荐指数
1
解决办法
2万
查看次数