发表于: 2018-11-19 20:54:39
0 904
一、今天完成的事情
传感器Sensor
调用传感器的步骤:
1.获取传感器管理对象
SensorMananger mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
2.获取传感器对象,以加速传感器Accelerometer为例
Sensor mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
加速传感器有三个值,X、Y、Z三个方向上的加速度(m/s^2)
3.注册监听
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
三个参数
第一个时监听接口SenSorEventListener
第二个是传感器对象
第三个是获取传感器数值的频率,有四个值供选择:
SENSOR_DELAY_UI, SENSOR_DELAY_NORMAL, SENSOR_DELAY_GAME, or SENSOR_DELAY_FASTEST
按顺序,从左到右频率越来越高,越来越消耗资源
4.回调
//当传感器的精度变化时回调该方法
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
//
}
//当传感器的值变化时回调该方法
@Override
public void onSensorChanged(SensorEvent event) {
//event.valude会以数组的形式返回传感器的数值
}
需要注意的是,加速传感器受地球重力影响,当手机的X、Y、Z三个轴的某一个轴垂直朝向地心方向时,其数值是地球的重力加速度,约9.8m/s^2,其它两个轴的值约为0。当手机倾斜时(XYZ三个轴的方向都没有朝向地心),三个轴上的数值都会受重力影响,都不是0。所以在实际开发中要注意这一点,关于解决方法,官方文档上有。
5.取消监听
mSensorManager.unRegisterListener(this);
具体代码
public class MainActivity extends AppCompatActivity implements SensorEventListener {
private static final String TAG = "MainActivity";
private SensorManager mSensorManager;
private Sensor mAccelerometer; //加速传感器,静止时受重力影响,某一方向的值为地球重力加速度,约9.8m/s^2
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
textView = (TextView) findViewById(R.id.textView);
}
@Override
protected void onResume() {
super.onResume();
//为传感器注册监听
Log.i(TAG, "onResume: 注册传感器监听");
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause: 取消注册传感器监听");
mSensorManager.unregisterListener(this);
}
//当传感器的精度变化时回调该方法
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
//
}
//当传感器的值变化时回调该方法
@Override
public void onSensorChanged(SensorEvent event) {
float values[] = event.values;
StringBuilder sb = new StringBuilder();
sb.append("加速传感器");
sb.append("\nX方向:");
sb.append(values[0]); //Acceleration minus Gx on the x-axis
sb.append("\nY方向:");
sb.append(values[1]); //Acceleration minus Gy on the y-axis
sb.append("\nZ方向:");
sb.append(values[2]); //Acceleration minus Gz on the z-axis
textView.setText(sb.toString());
}
}
AlertDialog dismiss 和 cancel方法的区别
执行cancel:
回调setOnCancelListener的监听事件—–>执行dismiss。
执行dismiss:
取消dialog—–>回调setOnDismissListener的监听事件。
如果只是取消dialog,两个方法都可以。
踩坑:RecyclerView只显示一行数据
原因:item布局写错了,高度应该是wrap_content,写成match_parent的话一个item就会占据整个页面,所以只会显示第一个数据。
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
......
</android.support.constraint.ConstraintLayout>
二、明天计划的事情
尝试利用传感器写几个小工具
三、遇到的问题
四、收获
传感器的基本调用方法
评论