我正在尝试获取加速度计和方向数据.目前,我创建了一个AccelerometerManager和OrientationManager.他们都做同样的事情; 实现SensorEventListener并从onSensorChanged()侦听器中的values []中检索数据.
有更简单的方法吗?似乎有两个处理程序重复代码是不必要的.有没有办法使用组合的加速度计和方向数据一起访问values []数组?
由于有两个处理程序,我还必须这样做:
orientationManager = new OrientationManager(this);
orientationSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
orientationSensorManager.registerListener(orientationManager,
orientationSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_GAME);
accelerometerManager = new AccelerometerManager(this);
accelerometerSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
accelerometerSensorManager.registerListener(accelerometerManager,
orientationSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_GAME);
Run Code Online (Sandbox Code Playgroud) [编辑:删除了所有提到的Android版本 - 所有版本的android都存在此问题]
背景:当屏幕关闭时,许多Android手机不会通过在屏幕关闭时调用onSensorChanged()来为Accelerometer读数的应用程序提供更新.此行为在SO上进行了讨论,并在此处进一步说明 http://code.google.com/p/android/issues/detail?id=3708
在某些手机(Nexus S,Droid X2,...)上,加速度计值仅在值发生重大变化时提供.例如,坐在桌子上,每分钟可能有一次或零次更新
为了生成跨手机型号的强大代码,我如何区分每个屏幕缺少更新事件,以及每次非移动缺少更新?我应该维护手机型号的数据库吗?
我需要选择一个数据库,用于从大量(数千到数万)传感器远程存储数据,每个传感器每分钟产生一个条目.
需要以各种方式查询所述数据,从具有用于统计的特定数据到用于绘图的简单输出的数据计数.
我正在寻找合适的工具,我从MySQL开始,但我觉得它缺乏这个项目所需的可扩展性,这导致我没有SQL数据库,我不太了解.
无论是关系型还是非关系型数据库都是不错的选择?
谢谢.
public class MainActivity extends Activity implements SensorEventListener {
private TextView temperaturelabel;
private SensorManager sensormanager;
private Sensor temperature;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
temperaturelabel = (TextView) findViewById(R.id.text);
sensormanager = (SensorManager)getSystemService(SENSOR_SERVICE);
temperature= sensormanager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
temperaturelabel.setText(""+temperature.getPower());
}
protected void onResume() {
super.onResume();
sensormanager.registerListener(this, temperature, SensorManager.SENSOR_DELAY_FASTEST);
}
protected void onPause() {
super.onPause();
sensormanager.unregisterListener(this);
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() != Sensor.TYPE_AMBIENT_TEMPERATURE) return;
temperaturelabel.setText(""+temperature.getPower());
}
}
Run Code Online (Sandbox Code Playgroud)
我想从设备中获取温度.
我写了这段代码,我在HTC One X上尝试过,但它没有用.
我希望尽可能从Android手机中的内置加速度计获得准确的数据.我想跟踪x和y轴的二维运动,甚至必须注册小的运动.
当我看到手机在桌子上平放时加速度计/线性加速度的数据时,当我应该为零时,它会发生很大的变化.
我看过卡尔曼滤波器,这似乎是一个很好的方法,但我在设置模型时遇到了问题.
1.卡尔曼滤波器是否可以从加速度计获得尽可能准确的数据?
2.卡尔曼滤波器是否有效?也许我误解了但似乎加速度或速度必须是恒定的?
3.如何设置使用卡尔曼滤波器的模型?我很难理解(除其他事项外)过程噪音是什么?
我的问题与此非常相似:iPhone接近传感器.有明确的iPhone内的温度计的一些方式是由OS可读.有没有人发现超级秘密的无证API来读取这个传感器?
我必须显示用户指向Android设备的方向.
我正在使用Sensor.TYPE_ACCELEROMETER,Sensor.TYPE_MAGNETIC_FIELD以获得方位角,俯仰,滚动.但我能够弄清楚如何从这里获得方向(北,南,东,西,......).
请帮忙
谢谢
我是这项技术的新手,有人可以帮助我了解一些疑问吗?
Q-1.CoAP数据包的大小是多少?
(我知道有4个字节的固定标头,但是包括标头,选项和有效负载的最大大小限制是多少?)
Q-2.像MQTT这样的Keep Alive有什么概念吗?
(它在UDP上工作了多长时间保持打开连接,是否有任何默认时间或每次发送数据包时都保持打开状态?)
Q-3.我们可以使用CoAP和TCP吗?
(CoAP的主要问题是它适用于UDP,是否有像MQTT QoS这样的概念?假设传感器每隔一秒发布一些数据,如果用户下线,CoAP中是否有任何保证,订户将获得所有数据时它上线了?)
Q-4.连接的持续时间是多少?
(CoAP支持发布/订阅架构,可能一直需要连接打开,是否可以与CoAP一起使用它是否基于UDP.)
Q-5.它是如何发现资源的?
(我有一个网关和5个传感器,这些传感器将如何连接到网关?网关会找到这些传感器吗?或者传感器会找到网关吗?)
Q-5.传感器如何在网关中注册?
请帮帮我,我真的需要回答.我对这些事情都很陌生,并建议我实施的观点.
谢谢.
我是Python的新手,我必须分析一个包含Excel格式的原始sensordata的大型数据集.
对于每个研究参与者,每个Excel数据文件大于100 MB.excelfile包含5张用于测量5种不同生理参数的薄片.每张纸包含超过100万行和两列(时间,生理参数).
在100万行sensordata之后,数据会自动在Excel文件的以下列(C和D)中继续.
每次我尝试在Python中加载数据文件时,都需要永远.我想知道几件事:
1)如何告诉Python从特定的 Excel工作表中读取数据?这花了这么长时间是正常的吗?
这是我试过的:
df = pd.read_excel("filepath", sheet_name="Sheetname")
print (df.head (5))
Run Code Online (Sandbox Code Playgroud)
2)使用Pandas在Python中为大型数据文件进行数据修改是否可行?我试过这个来加快这个过程:
import xlrd
work_book = xlrd.open_workbook('filepath', on_demand=True)
work_book.release_resources()
Run Code Online (Sandbox Code Playgroud)
3)后来:我想比较不同研究参与者的生理参数.由于这是研究参与者之间的时间序列分析,我怎样才能在Python中开始这样做?
我在几天内学会了Python的基础知识,到目前为止我都很喜欢它.我意识到我还有很长的路要走.
更新:我想我刚刚完成了时间序列分析(实际上只是趋势分析,使用Dickey-Fuller测试和滚动均值可视化技术)!:D非常感谢你的帮助!大熊猫中的"datetime"模块对我来说是最困难的,而我的日期时间列仍然被识别为"对象".这是正常的吗?不应该是datetime64吗?
我尝试从NDK访问加速度计.到目前为止它的作用.但事件写入事件队列的方式似乎有点奇怪.
请参阅以下代码:
ASensorManager* AcquireASensorManagerInstance(void) {
typedef ASensorManager *(*PF_GETINSTANCEFORPACKAGE)(const char *name);
void* androidHandle = dlopen("libandroid.so", RTLD_NOW);
PF_GETINSTANCEFORPACKAGE getInstanceForPackageFunc = (PF_GETINSTANCEFORPACKAGE) dlsym(androidHandle, "ASensorManager_getInstanceForPackage");
if (getInstanceForPackageFunc) {
return getInstanceForPackageFunc(kPackageName);
}
typedef ASensorManager *(*PF_GETINSTANCE)();
PF_GETINSTANCE getInstanceFunc = (PF_GETINSTANCE) dlsym(androidHandle, "ASensorManager_getInstance");
return getInstanceFunc();
}
void init() {
sensorManager = AcquireASensorManagerInstance();
accelerometer = ASensorManager_getDefaultSensor(sensorManager, ASENSOR_TYPE_ACCELEROMETER);
looper = ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS);
accelerometerEventQueue = ASensorManager_createEventQueue(sensorManager, looper, LOOPER_ID_USER, NULL, NULL);
auto status = ASensorEventQueue_enableSensor(accelerometerEventQueue,
accelerometer);
status = ASensorEventQueue_setEventRate(accelerometerEventQueue,
accelerometer,
SENSOR_REFRESH_PERIOD_US);
}
Run Code Online (Sandbox Code Playgroud)
这就是我初始化一切的方式.我的SENSOR_REFRESH_PERIOD_US是100.000 - 每秒10次刷新.现在我有以下方法来接收事件队列的事件.
vector<sensorEvent> update() {
ALooper_pollAll(0, NULL, NULL, NULL); …Run Code Online (Sandbox Code Playgroud)