Android利用Sensor实现传感器功能
本文实例为大家分享了android利用sensor实现传感器的具体代码,供大家参考,具体内容如下
一、传感器的使用
1、传感器的类型:
方向传感器::sensor.type_orientation
加速度(重力)传感器:sensor.type_accelefometer
光线传感器:sensor.typt_light
磁场传感器:sensor.type_mangnetic_field
距离(临近性)传感器:sensor.type_froximity
温度传感器:sensor.type_temperature
常用的api:
<1>得到传感器的服务(得到传感器的管理者)
sensormanager sm=(sensormanager)getsystemservice(sensor_service);
<2>得到手机所支持的所有的传感器的类型:
list list=sm.getsensorlist(sensormanager.type_all);
<3>传感器的类型:
sensor.gettype();
<4>传感器的名字;
sensor.getname();
<5>传感器的监听:sensoreventlistener()
sm.registerlistener(监听,传感器对象,rate);
重点:
<1>光线传感器:sensor.typt_light
得到光线值:float f=event.values[0];
windowmanager.layoutparams params = activity.getwindow().getattributes();
params.screenbrightness = value / 255f;
activity.getwindow().setattributes(params);
<2>加速度传感器:sensor.type_accelefometer
加速度有三个值:这三个值是手机在三个方向受到的加速度
float x=event.values[0];–>在手机顶部从左边沿往有边沿是手机的x轴的正方向
float y=event.values[1];–>从手机顶部沿手机左边沿手机底部是y轴的正方向
float z=event.values[2];–>垂直手机屏幕朝外的是正方向
<3>方向传感器:sensor.type_orientation
方向传感器三个值:
方向角:指手机平躺时,手机头部绕z轴旋转,与地球正北极的夹角
0代表北(north)
90代表东east
180代表南(south)
270代表西(west)
俯视角:手机绕x轴旋转与水平线的夹角
滚转角:手机绕y轴旋转与水平线的夹角
利用方向传感器实现 指南针应用
运行后效果图如下:
布局文件(activity_main.xml)
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context="com.example.g150825_android29.mainactivity"> <imageview android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/znz" android:id="@+id/iv_image" />i <textview android:layout_width="match_parent" android:layout_height="wrap_content" android:textsize="30sp" android:id="@+id/tv_main_result" /> </relativelayout>
java代码(mainactivity )
package com.example.g150825_android29; import android.content.context; import android.hardware.sensor; import android.hardware.sensorevent; import android.hardware.sensoreventlistener; import android.hardware.sensormanager; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.util.log; import android.view.view; import android.view.windowmanager; import android.view.animation.animation; import android.view.animation.rotateanimation; import android.widget.imageview; import android.widget.textview; import java.util.list; public class mainactivity extends appcompatactivity { private sensormanager sensormanager; private sensor sensorori; private textview tv_main_result; private mylistener mylistener; private imageview iv_image; private float current=0; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); tv_main_result = (textview) findviewbyid(r.id.tv_main_result); iv_image = (imageview) findviewbyid(r.id.iv_image); //得到传感器管理者 sensormanager = (sensormanager) getsystemservice(context.sensor_service); //得到光线传感器 // sensorlight = sensormanager.getdefaultsensor(sensor.type_light); //获取加速度传感器 // sensoracc = sensormanager.getdefaultsensor(sensor.type_accelerometer); //获取方向传感器 sensorori=sensormanager.getdefaultsensor(sensor.type_orientation); //获取光线传感器的值(光线值) mylistener = new mylistener(); } //注册监听(监听某一个传感器的值) @override protected void onresume() { super.onresume(); sensormanager.registerlistener(mylistener,sensorori,sensormanager.sensor_delay_ui); } class mylistener implements sensoreventlistener{ //当值发生改变 @override public void onsensorchanged(sensorevent sensorevent) { float[] f=sensorevent.values; float x=f[0]; float y=f[1]; float z=f[2]; tv_main_result.settext("x="+x+"\ny="+y+"\nz="+z); //实例化旋转动画 rotateanimation rotateanimation=new rotateanimation(current,-x, animation.relative_to_self,0.5f, animation.relative_to_self,0.5f); rotateanimation.setduration(200); current=-x; iv_image.startanimation(rotateanimation); //改变屏幕的亮度 // windowmanager.layoutparams layoutparams=getwindow().getattributes(); // layoutparams.screenbrightness=light/255f; // getwindow().setattributes(layoutparams); } //当值的精度发生改变 @override public void onaccuracychanged(sensor sensor, int i) { } } //取消注册监听 @override protected void ondestroy() { super.ondestroy(); sensormanager.unregisterlistener(mylistener); } // public void getallsensors(view view){ // list<sensor> sensors=sensormanager.getsensorlist(sensor.type_all); // for(sensor s:sensors){ // log.i("test", s.getname()); // } // // } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Android利用ContentProvider读取短信内容
下一篇: Java 网络资源下载