游戏建设网站网站建设道冲

当前位置: 首页 > news >正文

游戏建设网站,网站建设道冲,鲜花网站建设规划,金华网站建设平台目录 传感器的定义 三大类型传感器 1、运动传感器 2、环境传感器 3、位置传感器 传感器开发框架 1、SensorManager 2、Sensor 3、SensorEvent 4、SensorEventListener 一、使用传感器开发步骤 1、获取传感器信息 1)、获取传感器管理器 2)、获取设备的传感器对象列…目录 传感器的定义 三大类型传感器 1、运动传感器 2、环境传感器 3、位置传感器 传感器开发框架 1、SensorManager 2、Sensor 3、SensorEvent 4、SensorEventListener 一、使用传感器开发步骤 1、获取传感器信息 1)、获取传感器管理器 2)、获取设备的传感器对象列表 3)、迭代获取Sensor对象调用对应方法获取相关信息 2、获取传感器传回数据 1获得传感器管理器 2调用特定方法获得需要的传感器 3实现SensorEventListener接口重写onSensorChanged和onAccuracyChanged方法 4SensorManager对象调用registerListener注册监听器 5监听器的取消注册 二、获取传感器信息的实例 三、获取传感器传回数据的实例 原理 传感器的应用如微信的摇一摇功能、NFC、手机自带的指南针等等。下面将学习Android传感器的使用。 传感器的定义 一种物理设备或者生物器官能够探测、感受外界的信号物理条件(如光热 湿度)或化学组成如烟雾并将探知的信息传递给其他的设备或者器官。 三大类型传感器 1、运动传感器 –运动传感器测量加速力和旋转力它们包括加速度计重力传感器陀螺仪和旋转矢量传感器。 2、环境传感器 –环境传感器测量各种周围环境情况如环境温度、气压、光强、湿度等。包括气压计光度计和温度计。 3、位置传感器 –位置传感器测量设备的物理位置信息包括方向传感器和磁力计。 传感器开发框架 1、SensorManager –可以使用此类创建传感器服务的实例。这个类提供了多种方法来访问和列出传感器注册和注销传感器事件监听器并获取方向信息。该类还提供了几个传感器常量用于报告传感器的精度设置数据采集速率和校准传感器。 2、Sensor –可以使用此类创建特定传感器的实例。这个类提供了各种方法让你确定一个传感器的能力。 3、SensorEvent –系统使用此类创建传感器事件对象该对象提供有关传感器事件的信息。传感器事件对象包括以下信息原始传感器数据生成事件的传感器类型数据的准确性以及事件的时间戳。 4、SensorEventListener –可以使用此界面创建两种回传方法当传感器值更改或传感器准确度发生变化时会接收通知传感器事件。 一、使用传感器开发步骤 1、获取传感器信息 传感器的开发首先需要获取传感器的一些信息获取信息需要以下步骤 1)、获取传感器管理器 Android提供了一个sensorManager管理器通过这个类可以获取到都有哪些传感器获取sensorManager对象代码如下 SensorManager sm (SensorManager)getSystemService(SENSOR_SERVICE); 2)、获取设备的传感器对象列表 通过sensorManager管理器的getSensorList()方法可以获取传感器对象列表具体代码如下 ListSensor allSensors sm.getSensorList(Sensor.TYPE_ALL);3)、迭代获取Sensor对象调用对应方法获取相关信息 for(Sensor s:allSensors){sensor.getName(); //获得传感器名称sensor.getType(); //获得传感器种类sensor.getVendor(); //获得传感器供应商sensor.getVersion(); //获得传感器版本sensor.getResolution(); //获得精度值sensor.getMaximumRange(); //获得最大范围sensor.getPower(); //传感器使用时的耗电量 }2、获取传感器传回数据 1获得传感器管理器 SensorManager sm (SensorManager)getSystemService(SENSOR_SERVICE);2调用特定方法获得需要的传感器 调用SensorManager 对象的getDefaultSensor方法获取指定类型的传感器例如这里使用光线传感器具体代码: Sensor mSensorOrientation sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);3实现SensorEventListener接口重写onSensorChanged和onAccuracyChanged方法 ①onSensorChanged(SensorEvent event);该方法在传感器的值发生改变的时候调用其参数是一个SensorEvent 对象通过该对象的values属性可以获取传感器的值该值是一个数组该变量最多有三个元素而且传感器不同对应元素代表的含义也不同 ②onAccuracyChanged(Sensor sensor , int accuracy);当传感器的进度发生改变时会回调 参数说明 sensor传感器对象 accuracy表示传感器新的精度 Override public void onSensorChanged(SensorEvent event) {final float[] _Data event.values;this.mService.onSensorChanged(_Data[0],_Data[1],_Data[2]); } Override public void onAccuracyChanged(Sensor sensor, int accuracy) { }4SensorManager对象调用registerListener注册监听器 为传感器注册监听事件通过调用sensorManager对象的registerListener方法来注册监听事件。         第一个参数是上下文对象第二个是传感器对象第三个是传感器的延时时间的精密程 度越精密越耗电。          SENSOR_DELAY_FASTEST——延时0msSENSOR_DELAY_GAME——延时20msSENSOR_DELAY_UI——延时60msSENSOR_DELAY_NORMAL——延时200ms 具体代码如下 sm.registerListener(mContext, mSensorOrientation, android.hardware.SensorManager.SENSOR_DELAY_UI);5监听器的取消注册 sm. unregisterListener(this);二、获取传感器信息的实例 先将前面第一个步骤获取传感器信息实例演示一下如何使用。 新建项目SensorDemo1。 修改activity_main.xml代码如下 ?xml version1.0 encodingutf-8? androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivityScrollViewandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentTextViewandroid:idid/txt_showandroid:layout_widthmatch_parentandroid:layout_heightmatch_parent //ScrollView/androidx.constraintlayout.widget.ConstraintLayout 修改MainActivity代码如下 public class MainActivity extends AppCompatActivity {private TextView txt_show;private SensorManager sm;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sm (SensorManager) getSystemService(Context.SENSOR_SERVICE);txt_show (TextView) findViewById(R.id.txt_show);ListSensor allSensors sm.getSensorList(Sensor.TYPE_ALL);StringBuilder sb new StringBuilder();sb.append(此手机有 allSensors.size() 个传感器分别有\n\n);for(Sensor s:allSensors){switch (s.getType()){case Sensor.TYPE_ACCELEROMETER:sb.append(s.getType() 加速度传感器(Accelerometer sensor) \n);break;case Sensor.TYPE_GYROSCOPE:sb.append(s.getType() 陀螺仪传感器(Gyroscope sensor) \n);break;case Sensor.TYPE_LIGHT:sb.append(s.getType() 光线传感器(Light sensor) \n);break;case Sensor.TYPE_MAGNETIC_FIELD:sb.append(s.getType() 磁场传感器(Magnetic field sensor) \n);break;case Sensor.TYPE_ORIENTATION:sb.append(s.getType() 方向传感器(Orientation sensor) \n);break;case Sensor.TYPE_PRESSURE:sb.append(s.getType() 气压传感器(Pressure sensor) \n);break;case Sensor.TYPE_PROXIMITY:sb.append(s.getType() 距离传感器(Proximity sensor) \n);break;case Sensor.TYPE_TEMPERATURE:sb.append(s.getType() 温度传感器(Temperature sensor) \n);break;default:sb.append(s.getType() 其他传感器 \n);break;}sb.append(设备名称 s.getName() \n 设备版本 s.getVersion() \n 供应商 s.getVendor() \n\n);}txt_show.setText(sb.toString());} } 效果如下 三、获取传感器传回数据的实例 实现前面第二个步骤获取传感器传回数据实例演示一下如何使用。下面实现采集方向传感器数据。 原理 – X 轴的方向 沿着屏幕水平方向从左到右如果手机如果不是是正方形的话较短的边需要水平 放置较长的边需要垂直放置。值域 [-180, 180] – Y 轴的方向 从屏幕的左下角开始沿着屏幕的的垂直方向指向屏幕的顶端。值域 [-90, 90] – Z 轴的方向 当水平放置时指向天空的方向。值域 [0, 360] 新建项目SensorDemo2。 修改activity_main.xml代码如下 ?xml version1.0 encodingutf-8? androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivityLinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalandroid:padding5dpTextViewandroid:idid/tv_value1android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginTop10dpandroid:text方位角android:textSize18spandroid:textStylebold /TextViewandroid:idid/tv_value2android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginTop10dpandroid:text倾斜角android:textSize18spandroid:textStylebold /TextViewandroid:idid/tv_value3android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginTop10dpandroid:text滚动角android:textSize18spandroid:textStylebold //LinearLayout/androidx.constraintlayout.widget.ConstraintLayout 修改MainActivity代码如下 SENSOR_DELAY_FASTEST最灵敏 SENSOR_DELAY_GAME 游戏的时候不过一般用这个就够了 SENSOR_DELAY_NORMAL 比较慢。 SENSOR_DELAY_UI 最慢的 public class MainActivity extends AppCompatActivity implements SensorEventListener {private TextView tv_value1;private TextView tv_value2;private TextView tv_value3;private SensorManager sManager;private Sensor mSensorOrientation;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sManager (SensorManager) getSystemService(SENSOR_SERVICE);mSensorOrientation sManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);sManager.registerListener(this, mSensorOrientation, SensorManager.SENSOR_DELAY_UI);bindViews();}private void bindViews() {tv_value1 (TextView) findViewById(R.id.tv_value1);tv_value2 (TextView) findViewById(R.id.tv_value2);tv_value3 (TextView) findViewById(R.id.tv_value3);}Overridepublic void onSensorChanged(SensorEvent event) {tv_value1.setText(方位角(沿Z轴) (float) (Math.round(event.values[0] * 100)) / 100);tv_value2.setText(倾斜角(沿X轴) (float) (Math.round(event.values[1] * 100)) / 100);tv_value3.setText(滚动角(沿Y轴) (float) (Math.round(event.values[2] * 100)) / 100);}Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}Overrideprotected void onDestroy() {super.onDestroy();sManager.unregisterListener(this);} } 效果如下 下篇文章将通过靠近屏幕黑屏和计步器两个案例实践一下传感器的应用。