我从一个基于ShakeActivity的Activity开始,我想为它编写一些单元测试.我之前已经为Android活动编写过一些小的单元测试,但我不知道从哪里开始.我想为加速度计提供一些不同的值,并测试活动如何响应它.现在我保持简单,只是在发生"摇动"事件时更新私有的int计数器变量和TextView.
所以我的问题很大程度上归结为:
如何从单元测试中将假数据发送到加速度计?
我需要检索手机的方向.目前我写了这个:
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()){
case Sensor.TYPE_MAGNETIC_FIELD:
this.mag_vals = event.values.clone();
this.sensorReady = true;
break;
case Sensor.TYPE_ACCELEROMETER:
this.acc_vals = event.values.clone();
break;
}
if (this.mag_vals != null && this.acc_vals != null && this.sensorReady) {
this.sensorReady = false;
float[] R = new float[ProjectConstants.SIZE_MATRIX];
float[] I = new float[ProjectConstants.SIZE_MATRIX];
SensorManager.getRotationMatrix(R, I, this.acc_vals, this.mag_vals);
SensorManager.getOrientation(R, this.actual_orientation);
...
Run Code Online (Sandbox Code Playgroud)
如果我将手机放在平面上并将其旋转到表面上,此代码可让我获取手机的方向.
我不明白的是,如果我向上移动手机的值this.actual_orientation[0],即[此处] [1]所述的zed轴上的旋转,虽然没有旋转,但值会增加.
有人知道会发生什么吗?
编辑
另一件奇怪的事......
我在办公室里尝试了我的应用程序,它有我之前描述的奇怪的行为..我在同一个办公室(同样的情况)尝试了一个指南针应用程序,我从市场上取得它与我的相同的行为..当我我把电话向上移动了一致的价值变化..我在同一个办公室(同样的情况)尝试了i-phone罗盘,它没有那种奇怪的行为!
然后,当我到家时,我尝试了两个,我的应用程序和我的Android手机的指南针应用程序,他们工作!!即使我向上移动手机价值稳定...
非常感谢.
[1]:http://developer.android.com/reference/android/hardware/SensorManager.html#getOrientation(float [],float [])
有一个编译命令行应用程序在这里做这个.
是否有Cocoa API来查询这些数据?
有没有人知道GPS,罗盘航向和加速度计之间使用最多的电池(或他们如何相对比较?)
我假设有些天真:
加速度计<罗盘标题<GPS
但我找不到任何可以证实或反驳我的直觉的东西.
澄清:我很好奇它在iPhone上的表现如何.
iphone gps accelerometer background-process compass-geolocation
我正在开发使用SensorManager用于不同目的的Android应用程序.在调查过程中,我发现Sensor.getResolution()函数为不同的设备返回不同的值:
所有板载传感器的HTC Sensation都具有1.0分辨率值.
摩托罗拉XOOM:
3-axis Accelerometer -> 0.009576807
3-axis Magnetic field sensor -> 0.0625
L3G4200D Gyroscope sensor -> 0.0012217305
Linear Acceleration Sensor -> 0.009576807
Gravity Sensor -> 0.009576807
Run Code Online (Sandbox Code Playgroud)
在使用适当的传感器值之前,我是否需要使用此分辨率值进行额外计算尚不清楚.官方文件没有说明它.
任何人都可以向我解释这个"决议"的价值目的吗?
我记得WWDC上有一个谈话,显示OpenGL ES中的茶壶,随着设备的移动而旋转.看来茶壶在太空中静止不动.
当应用程序启动时,茶壶开始处于特定位置.然后当设备旋转时,茶壶也旋转到空间静止不动.
在这次演讲中,他们提到我们必须获得"参考框架",例如在应用程序启动时,它告诉我们用户最初如何持有设备.
例如,这里是加速度计轴:

我想知道围绕Y轴的旋转,但是相对于用户如何握住设备.因此,当用户将其保持直立并围绕Y旋转时,我需要知道旋转值.
我认为关键是从读数中消除重力?另外我的目标是带有陀螺仪的iPhone 4/4S,但我认为CoreMotion会自动对它们进行传感器融合.
我怎么能弄清楚用户围绕Y轴旋转设备的程度?
我试过arduino.cc提供的这个草图.(我有一个MPU6050 GY-521分线板.)
我认为它运作正常.它提供了一组奇怪的数字,我无法得到任何意义.它说那些是原始价值.
如何将它们转换为有意义的值?
输出如下.即使整个事物保持静止,它也会带来不断变化的价值!这有意义吗?然后怎么理解?
(我只知道温度值是有意义的:D)
June 2012
WHO_AM_I : 68, error = 0
PWR_MGMT_2 : 0, error = 0
MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 260, 120, 15572
temperature: 31.047 degrees Celsius
gyro x,y,z : -24, -234, -240,
MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 304, 12, 15608
temperature: 31.000 degrees Celsius
gyro x,y,z : -7, -234, -232,
MPU-6050
Read accel, temp and gyro, error = …Run Code Online (Sandbox Code Playgroud) 我正在构建一个html5的网络应用程序,此时需要能够检测到用户何时摇动手机以及它们晃动的速度.我一直在浏览,但似乎无法找到任何我如何实现这一点的例子.我知道html5有一个可以检测手机方向的加速度计,但它如何检测用户摇动它的速度?
我也在我的iPhone上测试这个,虽然理想情况下我也希望它能在Android设备上运行.思考?例子也很棒.谢谢!
我的应用程序只需要在屏幕关闭时检测设备的任何动作.
我知道加速度计用于此任务,但在所有设备中屏幕关闭时它不起作用.这是设备列表http://www.saltwebsites.com/2012/android-accelerometers-screen-off
那么有什么方法可以在屏幕关闭时获取加速计传感器数据,适用于所有设备?
或者有没有办法用另一个传感器检测运动?
有人可以解释之间的差异CMAccelerometerData和CMDeviceMotion.
在我看来,加速度值CMAccelerometerData是原始值,因为数据以CMDeviceMotion某种方式插值,或类似的东西.
accelerometer ×10
android ×4
gyroscope ×3
sensor ×3
core-motion ×2
ios ×2
iphone ×2
arduino ×1
cocoa ×1
gps ×1
html5 ×1
javascript ×1
macos ×1
magnetometer ×1
orientation ×1
shake ×1
unit-testing ×1