android - 如何定期从 onSesorChanged() 传递值
问题描述
这是我的代码:
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
SensorManager.getRotationMatrixFromVector(rotationMatrix, event.values);
azimuth = (int) ((Math.toDegrees(SensorManager.getOrientation(rotationMatrix, orientation)[0]) + 360) % 360);
txt_azimuth.setText("Azimuth : " + Integer.toString(azimuth) + "° " + n);
if (azimuth >= 337 && azimuth <= 360 || azimuth >= 0 && azimuth <= 22) {
n = "N"; // 0 deg
} else if (azimuth > 22 && azimuth < 68) {
n = "NE"; //45 deg
} else if (azimuth >= 68 && azimuth <= 112) {
n = "E"; // 90deg
} else if (azimuth > 112 && azimuth < 157) {
n = "SE"; //135deg
} else if (azimuth >= 157 && azimuth <= 203) {
n = "S"; //180deg
} else if (azimuth > 203 && azimuth < 248) {
n = "SW"; //225deg
} else if (azimuth >= 248 && azimuth <= 293) {
n = "W"; //270deg
} else if (azimuth > 293 && azimuth < 337) {
n = "NW";//315deg
}
try {
ParticleCloudSDK.getCloud().publishEvent("function name", n, ParticleEventVisibility.PUBLIC, 60);
} catch (ParticleCloudException e) {
e.printStackTrace();
}
}
}
onSensorChanged()
当手机移动时,方法每秒被调用多次(可能是数千次)。我可以在应用程序屏幕上看到 n 方向的值。那部分正在工作。但我想做的是让方法publish.event()
每秒被调用一次,以获取当时 n 的值并将其发布到云端。所以基本上,方向应该每秒发布一次。
我无法弄清楚如何让它每隔一段时间工作。
解决方案
将所需数据存储在变量中,创建任务以使用计时器功能以固定间隔运行更新功能,
new Timer().scheduleAtFixedRate(TimerTask task, long delay, long period)
推荐阅读
- javascript - MongoDB:仅对小于或等于某个值的项目进行排序
- security - 在未经授权的用户的情况下登录的最佳实践
- javascript - 如何用matter.js画一个半圆?
- regex - Powershell - 尝试从 Powershell v 2.0 及更高版本中的 Env Var 路径中提取应用程序安装路径
- c# - Crystal Reports - 在详细信息部分显示多变量参数
- javascript - Function App/GetSPANList 在服务器上返回 401 错误。C# asp.net
- react-native-snap-carousel - react-native-snap-carousel 'SliderWidth' 的大小与屏幕宽度相同。所以我不能在“ios”上使用“react-navigation”滑动(gestureEnabled)
- asp.net-mvc - 无法从 int 转换为“类名”
- javascript - 数组javascript循环错误
- python - 通过 AWS PrivateLink 从不同的 AWS 账户访问 AWS ElastiCache(Redis CLUSTER 模式)