首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >显示超时期间加速度计采样频率的变化

显示超时期间加速度计采样频率的变化
EN

Stack Overflow用户
提问于 2016-03-12 13:20:54
回答 3查看 1.2K关注 0票数 0

对于我的硕士论文,我正在开发一个能够从三星Galaxy S5的3轴加速度计收集数据的安卓应用程序。因为我想跟踪人类活动,所以我需要一个大约50 of的采样率。我通过将采样率设置为SENSOR_DELAY_GAME来实现这一点,它工作得很好。为了检查采样率,我在电话显示屏上显示了包含加速计数据的列表的长度。当手机屏幕打开时,一切正常,即使我在不同应用程序之间进行数据采集时进行切换。这样做,我在30秒内收到大约1500个值,这意味着采样率的准确性适合我的目的。

我现在的问题是,当屏幕超时时,加速度计的采样率会降低到5 Hz,当屏幕打开时,采样率又会变到50 Hz。有没有办法把加速度计的采样率固定到50 Hz?

PS:我更喜欢不将屏幕设置为永久打开的解决方案,以节省电池寿命。

谢谢,Ziegi

编辑:我添加了加速度计所需的必要方法。未使用已有的方法onPause()、onStop()和onResume()导致只有在发生停止按钮单击事件时测量才会停止。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public void initListeners(){
    mSensorManager.registerListener(this,
            mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_GAME);

}

public void onSensorChanged(SensorEvent event) {
    if (startFlag == true) {

        switch(event.sensor.getType()) {
            case Sensor.TYPE_ACCELEROMETER:
                // copy new accelerometer data into accel array
                // then calculate new orientation
                System.arraycopy(event.values, 0, accel, 0, 3);
                calculateAccMagOrientation();

                xText.setText("X: " + decimal.format(event.values[0]));
                yText.setText("Y: " + decimal.format(event.values[1]));
                zText.setText("Z: " + decimal.format(event.values[2]));


                xValue.add(event.values[0]);
                yValue.add(event.values[1]);
                zValue.add(event.values[2]);


                try {
                    xSize.setText(String.valueOf(xValue.size()));} catch(Exception e) {
                    Toast.makeText(getBaseContext(), "Fehler bei Add to List", Toast.LENGTH_SHORT).show();
                }
                break;

        }

}
}
EN

回答 3

Stack Overflow用户

发布于 2016-03-12 22:05:00

我现在的问题是,当屏幕超时时,加速度计的采样率会降低到5 Hz,当屏幕打开时,采样率又会变到50 Hz。有没有办法把加速度计的采样率固定到50 Hz?

PS:我更喜欢不将屏幕设置为永久打开的解决方案,以节省电池寿命。

这就是重点所在。当屏幕关闭时,应使用较少的电力。用户还期望功耗更低。以较低的采样率进行采样是任何像样的操作系统处理功率限制情况的许多方法之一。

因此,如果有任何支持的方法来提高采样率,而手机的屏幕关闭,我会感到非常惊讶。

票数 0
EN

Stack Overflow用户

发布于 2016-05-01 02:46:34

您可能希望将读取加速度计的代码作为服务运行,而不是在应用程序中运行。在这里类似的回答中,AleAdam很好地描述了这一点:Keep UI Thread running when screen is off

在另一个线程答案中提到了几个教程。

票数 0
EN

Stack Overflow用户

发布于 2016-09-15 14:05:16

你可能想要的是保持你的CPU以相同的速度运行,试着使用Wakelock:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PowerManager powerManager = null;
PowerManager.WakeLock wakeLock = null;    

powerManager = (PowerManager) getSystemService(POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                "MyWakelockTag");
wakeLock.acquire();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35958160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文