发表于: 2018-11-19 20:54:39

0 902


一、今天完成的事情

传感器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>



二、明天计划的事情

尝试利用传感器写几个小工具


三、遇到的问题    


四、收获

   传感器的基本调用方法



返回列表 返回列表
评论

    分享到