我正在为计算机科学的最终论文开发一个应用程序,我需要收集和logging加速计数据。 我需要整整一天的时间,所以有严重的电池限制(例如,我不能离开屏幕)。 此外,这不是一个市场针对性的应用程序,所以如果需要的话,做一些严重的黑客攻击,甚至是低级的C / C ++编码是相当可接受的。 众所周知,在许多设备上,加速度计事件的侦听器在屏幕熄灭时停止生成事件(有关此问题的一些链接: http : //code.google.com/p/android/issues/detail? id = 3708 , Accelerometer在Droid / Nexus One屏幕closures的情况下停止提供样本,即使使用WakeLock也是如此 )。 我彻底search了一些替代品,其中一些包括变通办法,不适用于我的设备(LG P990,股票ROM)。 那么会发生什么呢:当你在一个服务中注册一个android加速度计传感器的事件监听器时,它会正常工作,直到屏幕closures。 我已经尝试在IntentService上的Service上注册eventListener,试图获取WakeLocks。 关于wakelocks,我可以validation服务仍在运行看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), […]
目前,我正在尝试使用方向传感器值使用getRotation()方法来旋转3D立方体。 当Android设备被旋转到一些边界之上时,会观察到一些意外的行为。 例如,如果我让设备“站起来”,“滚动”的价值就变得疯狂了。 此外,我正在经历类似于所谓的万向节锁的现象。 唯一的区别是我甚至在将传感器值应用到3D旋转之前遇到了这个问题。 当我尝试通过仅围绕“俯仰”轴旋转装置来改变“俯仰”值时,“俯仰”值也根据俯仰的旋转而改变。 对我来说这似乎完全不合理。 有人能帮我吗? 我被困在这个问题上一个月了。
我正在考虑实现一个Android手机的惯性导航系统,我认识到加速度计的准确性和读数的不断波动是很难的。 首先,我把手机放在一个平面上,在X和Y方向(与桌子平行,所以没有重力作用在这些方向上)采样1000个加速度计读数。 然后,我对这些读数取平均值,并使用这个值来校准手机(从以后的每个读数中减去这个值)。 然后,我再次把它放在桌子上,并在X和Y方向上取样5000个加速度计读数来testing系统。 在给定校准的情况下,我希望这些加速度在每个方向上加起来大致为0。 但是,情况并非如此,5000次迭代的总加速度远不是0(每个轴上的平均值约为10)。 我意识到没有看到我的代码,这可能很难回答,但从更广义的意义上说… 这仅仅是加速度计读数在手机(HTC Desire S)上的不准确度的一个例子,还是更可能是我在编码方面出现了一些错误?