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

安阳网站制作 网络服务qq推广链接生成

安阳网站制作 网络服务,qq推广链接生成,钓鱼网站怎么做防护教程,黄页88企业名录目录 传感器的定义 三大类型传感器 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方法

4)SensorManager对象调用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()方法,可以获取传感器对象列表,具体代码如下:

List<Sensor> 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) {
}

4)SensorManager对象调用registerListener注册监听器

        为传感器注册监听事件,通过调用sensorManager对象的registerListener()方法来注册监听事件。

        第一个参数是上下文对象,第二个是传感器对象,第三个是传感器的延时时间的精密程 度,越精密越耗电。

        

  • SENSOR_DELAY_FASTEST——延时:0ms
  • SENSOR_DELAY_GAME——延时:20ms
  • SENSOR_DELAY_UI——延时:60ms
  • SENSOR_DELAY_NORMAL——延时:200ms

具体代码如下:

sm.registerListener(mContext, mSensorOrientation, android.hardware.SensorManager.SENSOR_DELAY_UI);

5)监听器的取消注册

sm. unregisterListener(this);

二、获取传感器信息的实例

        先将前面第一个步骤:获取传感器信息,实例演示一下如何使用。

新建项目SensorDemo1。

修改activity_main.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/txt_show"android:layout_width="match_parent"android:layout_height="match_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);List<Sensor> 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 version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="5dp"><TextViewandroid:id="@+id/tv_value1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="方位角"android:textSize="18sp"android:textStyle="bold" /><TextViewandroid:id="@+id/tv_value2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="倾斜角"android:textSize="18sp"android:textStyle="bold" /><TextViewandroid:id="@+id/tv_value3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="滚动角"android:textSize="18sp"android:textStyle="bold" /></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);}
}

效果如下:

 

下篇文章将通过靠近屏幕黑屏和计步器两个案例实践一下传感器的应用。

http://www.hkea.cn/news/80922/

相关文章:

  • 清河做网站报价seo实战培训王乃用
  • wordpress 回收站在哪个文件夹营销方式和手段
  • 垂直型电商网站如何做快速排名软件哪个好
  • 做产品推广有网站比较好的免费自助建站平台
  • 番禺网站建设公司排名百度推广页面投放
  • 沈阳做微网站百度收录刷排名
  • 网站建设与管理技术发展seo是什么意思如何实现
  • 手机游戏开发制作公司最新seo视频教程
  • 网站优化过度被k长春seo排名公司
  • wordpress移除谷歌字体seo网站推广与优化方案
  • 十大景观设计公司排名seo权重查询
  • 水友做的yyf网站十大免费引流平台
  • 东莞公司网站制作百度识图网页版 在线
  • 企业级网站内容管理解决方案网站关键词快速排名服务
  • 影视采集网站怎么做收录关键词是网站seo的核心工作
  • 开发一个网站需要多少时间百度账号免费注册
  • 化妆品网站主页设计长沙关键词优化方法
  • 南阳建网站企业百度推广优化工具
  • 怎样把自己做的网页放在网站里如何做宣传推广营销
  • 七谷网络工作室重庆优化seo
  • 东莞网站建设规范软文内容
  • 项目网站建设业务分析搜索优化的培训免费咨询
  • linux做网站服务器吗关键词上首页软件
  • 西安网站建设行业动态手机营销软件
  • 做推送的网站推荐今日新闻摘抄50字
  • 想在自己的网站做支付优化公司治理结构
  • 国内一家做国外酒店团购的网站网络推广优化是干啥的
  • 手机3d动画制作软件重庆网络seo公司
  • 青海和城乡建设厅网站石家庄自动seo
  • 建站网址是多少深圳市seo上词多少钱