Android Gserson 重力传感器校准
在MTK平台 开机时同时按住:音量减键+开机键 即可进入工厂模式,在工厂模式内有一个gsensor calibration,该功能就是去G-Serson重力传感器(也叫加速度传感 器)校准的,
请注意区分 工厂模式与工程模式APP
工程模式APP: alps\vendor\mediatek\proprietary\packages\apps\EngineerMode
使用 SensorManager 获取到全部的传感器
List<Sensor> sensorList = mSensorManager.getSensorList(Sensor.TYPE_ALL)
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
SensorEventListener 说明
当传感器数据发生变化的时候,Android 传感器框架构建了一个事件(SensorEvent),我们可以使用 SensorEventListener 接口来监听数据变化,并在 onSensorChanged()回调中处理新数据
SensorEventListener 包括两个回调函数,我们能够在其中处理传感器数据
onSensorChanged() : 当传感器数据时可用的,我们可以在这里处理我们 APP 中的新传感器数据
onAccuracyChanged(): 当传感器精确度改变后,我们的 APP 能够响应这个变化
如下:当设备运动或者旋转的时候,这些坐标轴是不会改变的,即它们是跟随手机的
计算每个坐标轴上的实际量程和理论量程的比例关系scale
计算每个坐标轴上的零点偏移offset
对原始数据进行校准调整
Accelerometer 加速度传感器
加速度传感器又叫G-sensor,返回x、y、z三轴的加速度数值。
该数值包含地心引力的影响,单位是m/s^2。
将手机平放在桌面上,x轴默认为0,y轴默认0,z轴默认9.81。 将手机朝下放在桌面上,z轴为-9.81。 将手机向左倾斜,x轴为正值。 将手机向右倾斜,x轴为负值。 将手机向上倾斜,y轴为负值。 将手机向下倾斜,y轴为正值。
使用方式
第一步:获取SensorManager对象
第二步:获取Sensor对象
第三步:注册Sensor对象
第四步:重写onAccuracyChanged,onSensorChanged这两个方法
第五步:注销Sensor对象
public class SensorActivity extends Activity implements SensorEventListener { private SensorManager mSensorManager; private Sensor mSensor; @Override public final void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //第一步:通过getSystemService获得SensorManager实例对象 mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); //第二步:通过SensorManager实例对象获得想要的传感器对象:参数决定获取哪个传感器 mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); } //第四步:必须重写的两个方法:onAccuracyChanged,onSensorChanged /** * 传感器精度发生改变的回调接口 */ @Override public final void onAccuracyChanged(Sensor sensor, int accuracy) { //TODO 在传感器精度发生改变时做些操作,accuracy为当前传感器精度 } /** * 传感器事件值改变时的回调接口:执行此方法的频率与注册传感器时的频率有关 */ @Override public final void onSensorChanged(SensorEvent event) { // 大部分传感器会返回三个轴方向x,y,x的event值,值的意义因传感器而异 float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; //TODO 利用获得的三个float传感器值做些操作 } /** * 第三步:在获得焦点时注册传感器并让本类实现SensorEventListener接口 */ @Override protected void onResume() { super.onResume(); /* *第一个参数:SensorEventListener接口的实例对象 *第二个参数:需要注册的传感器实例 *第三个参数:传感器获取传感器事件event值频率: * SensorManager.SENSOR_DELAY_FASTEST = 0:对应0微秒的更新间隔,最快,1微秒 = 1 % 1000000秒 * SensorManager.SENSOR_DELAY_GAME = 1:对应20000微秒的更新间隔,游戏中常用 * SensorManager.SENSOR_DELAY_UI = 2:对应60000微秒的更新间隔 * SensorManager.SENSOR_DELAY_NORMAL = 3:对应200000微秒的更新间隔 * 键入自定义的int值x时:对应x微秒的更新间隔 * */ mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL); } /** * 第五步:在失去焦点时注销传感器 */ @Override protected void onPause() { super.onPause(); mSensorManager.unregisterListener(this); } }
网文:
https://blog.csdn.net/qq_23452385/article/details/106485863
https://blog.csdn.net/hjwang1/article/details/106949028
评论