在android中手机传感器如何调用
发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,这篇文章主要为大家展示了"在android中手机传感器如何调用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"在android中手机传感器如何调用"这篇文章
千家信息网最后更新 2024年11月22日在android中手机传感器如何调用
这篇文章主要为大家展示了"在android中手机传感器如何调用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"在android中手机传感器如何调用"这篇文章吧。
源码:
package com.bobo.study.study_5_1; import android.app.Activity;import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast; import java.util.List;//1,获得SensorManager对象//2,获得想要的Sensor对象//3,绑定监听器public class MainActivity extends Activity implements View.OnClickListener{ Button findBut,accelerationBut,lightBut,orientationBut,proximityBut; SensorManager sensorManager; TextView text,accText,luxText; float gravity[]=new float[3]; float linear_acceleration[]=new float[3]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findBut=(Button)findViewById(R.id.findBut); findBut.setOnClickListener(this); lightBut=(Button)findViewById(R.id.lightBut); lightBut.setOnClickListener(this); accelerationBut=(Button)findViewById(R.id.accelerationBut); accelerationBut.setOnClickListener(this); orientationBut=(Button)findViewById(R.id.orientationBut); orientationBut.setOnClickListener(this); proximityBut=(Button)findViewById(R.id.proximityBut); proximityBut.setOnClickListener(this); text=(TextView)findViewById(R.id.text); accText=(TextView)findViewById(R.id.accText); luxText=(TextView)findViewById(R.id.luxText); //获得传感器管理器对象 sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE); } @Override public void onClick(View v) { if(v==findBut){ //获取手机上所有传感器的列表 Listsensors=sensorManager.getSensorList(Sensor.TYPE_ALL); for(Sensor sensor:sensors){ System.out.println(sensor.getName()); } }else if(v==lightBut){ //得到默认的加速度传感器 Sensor lightSensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); //绑定监听器(上下文接口,要监听的传感器,传感器采样率<时间间隔>),返回结果 Boolean res=sensorManager.registerListener(new LightSensorListener(),lightSensor,SensorManager.SENSOR_DELAY_NORMAL); Toast.makeText(this,"绑定光线传感器:"+res,Toast.LENGTH_LONG).show(); } else if(v==accelerationBut){ Sensor accelerometerSensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); Boolean res=sensorManager.registerListener(new AccerationSensorListener(),accelerometerSensor,SensorManager.SENSOR_DELAY_NORMAL); Toast.makeText(this,"绑定加速度传感器:"+res,Toast.LENGTH_LONG).show(); }else if(v==orientationBut){ Sensor orientationSensor=sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); Boolean res=sensorManager.registerListener(new OrientaationListener(),orientationSensor,SensorManager.SENSOR_DELAY_NORMAL); Toast.makeText(this,"绑定方向传感器:"+res,Toast.LENGTH_LONG).show(); } else if(v==proximityBut){ Sensor proximitySensor=sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); Boolean res=sensorManager.registerListener(new ProximityListener(),proximitySensor,SensorManager.SENSOR_DELAY_NORMAL); Toast.makeText(this,"绑定距离传感器:"+res,Toast.LENGTH_LONG).show(); } } public class LightSensorListener implements SensorEventListener{ @Override //传感器的数据被打包成event,主要的检测数据放在enent.values[]数组中 public void onSensorChanged(SensorEvent event) { System.out.println(event.timestamp);//时间戳 System.out.println(event.sensor.getResolution());//分辨率(能识别出最小数值) System.out.println(event.accuracy);//精度(等级) System.out.println(event.values[0]);//光线强度 } @Override //传感器精度变化时调用这个函数 public void onAccuracyChanged(Sensor sensor, int accuracy) {} } public class AccerationSensorListener implements SensorEventListener{ @Override public void onSensorChanged(SensorEvent event) { final float alpha=0.8f; //event.values[0]X轴加速度,负方向为正 //event.values[1]Y轴加速度,负方向为正 //event.values[2]Z轴加速度,负方向为正 gravity[0]=alpha*gravity[0]+(1-alpha)*event.values[0]; gravity[1]=alpha*gravity[1]+(1-alpha)*event.values[1]; gravity[2]=alpha*gravity[2]+(1-alpha)*event.values[2]; linear_acceleration[0]=event.values[0]-gravity[0]; linear_acceleration[1]=event.values[1]-gravity[1]; linear_acceleration[2]=event.values[2]-gravity[2]; //通过以上公式可以抛去三个方向上的重力加速度,只剩下纯加速度 text.setText(linear_acceleration[0] + ""); accText.setText(linear_acceleration[1] + ""); luxText.setText(linear_acceleration[2] + ""); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) {} } public class OrientaationListener implements SensorEventListener{ @Override public void onSensorChanged(SensorEvent event) { //(需要手机屏幕向上,向下的话南北会反掉)设备绕Z轴旋转,Y轴正方向与地磁北极方向的夹角,顺时针方向为正,范围【0,180】 float azimuth=event.values[0]; //设备绕X轴旋转的角度,当Z轴向Y轴正方向旋转时为正,反之为负,范围【-180,180】 float pitch=event.values[1]; //设备绕Y轴旋转的角度,当Z轴向X轴正方向旋转时为负,反之为正,范围【-90,90】 float roll=event.values[2]; text.setText(azimuth+""); accText.setText(pitch +""); luxText.setText(roll+""); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) {} } public class ProximityListener implements SensorEventListener{ @Override public void onSensorChanged(SensorEvent event) { //距离传感器测试手机屏幕距离别的物体的记录,只有两个值:0和5 //距离很近时为0,否则为5 System.out.println(event.values[0]+""); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) {} } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}
以上是"在android中手机传感器如何调用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
传感器
方向
加速度
手机
内容
对象
篇文章
范围
设备
监听
光线
屏幕
数据
监听器
精度
角度
学习
帮助
最小
三个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
大厂服务器容易渗透吗
定序数据库计算
网络安全的厂商有哪些
时代的网络安全
路由器dns服务器为什么有2个
不插网线无法打开数据库
久久久互联网科技有限公司
网络安全人员能力认证证书
怎么看机柜服务器的功率
当前网络安全环境
网络安全事件性别比例
如何查询软件开发公司
工业网络技术工资
广州市探途网络技术有限公司
数据库和java连接
永宁县办公软件开发联系方式
spss横向数据库格式整理
数据库 索引 重复
网络安全服务排行榜
网络安全领域扫黑除恶
今年网络安全的主题是
数据库 命名 规范
gpu数据库性能优化怎么样
分析计算机网络安全技术
提交数据库操作出错
无锡网络技术咨询服务电话
王宁 浅谈当今移动网络安全
泰山科技学院计算机网络技术
现代网络技术与课堂教学
平谷区数据网络技术诚信服务