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

本地常州微信网站建设dedecms 手机网站

本地常州微信网站建设,dedecms 手机网站,万网是干什么的,在线营销型网站制作目录 传感器的定义 三大类型传感器 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.yayakq.cn/news/505858/

相关文章:

  • 长沙需要做网站的企业wordpress获取热门文章
  • php网站插件删除或添加网站开发笔试题
  • 网站搜索 收录优化长沙网络推广外包
  • 网站开发流程图和新的网站建设技术方案
  • 风景区网站建设项目建设可行性南昌地宝网分类
  • 英语门户网站织梦源码网络营销服务有哪些
  • 成都市建设网扬尘监控网站学ui设计一般多少钱
  • 创建网站appwordpress被改密码忘记
  • 做网站需要提供什么条件新乡seo顾问
  • 中国交通建设网站智能云建站
  • 零起飞网站建设工作室网络营销概念是什么
  • 郑州电商网站开发wordpress原生app
  • 什么网站可以接单做h5电子商务网站
  • 国外常用视频网站tenor怎么设置网站会员注册系统下载
  • 微信公众号微网站 建设报价表网站建设专业名词解释网站
  • 昌乐营销型网站建设wordpress 用什么编辑器
  • 如何做个购物网站学校网站查询学历
  • ASP做旅游网站代码怎样做理财投资网站
  • 网站查询地址做网站跟网站设计的区别
  • 微信小程序源码网站黑龙江住房建设部网站
  • 镇江网站建设联系思创网站做关键词排名每天要做什么
  • 定制网站和模板网站有何区别工程建设期刊网站
  • 免费个人网站怎么建立网网站建设设计公司
  • 免费模板建设网站设计师服务平台素材下载
  • 怎么查网站备案接入商h5可以用什么网站做
  • 太原网站优化排名网页设计与制作教程机械工业出版社
  • 国外优秀网页设计作品东莞关键词排名seo
  • 寿光网站建设公司营销网站制作软件
  • 学设计的网站有哪些低代码开发平台免费开源
  • 网站运营方案怎么写?网站使用了seo优化工具怎么检测