Android利用Senser实现不同的传感器
程序员文章站
2023-12-17 20:38:40
传感器有不同的类型,以下是我列出的光线,加速度,风向传感器,在测试不同传感器的时候都需将传感器管理的onresume中sensormanager.registerliste...
传感器有不同的类型,以下是我列出的光线,加速度,风向传感器,在测试不同传感器的时候都需将传感器管理的onresume中sensormanager.registerlistener(mylistner,sensorori,sensormanager.sensor_delay_ui);
第二个参数改为相应的传感器,此dem中我加入了一张指南针图片作为示例:
activity_main.xml
<button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="查看所有支持的传感类型" android:onclick="getallsensors" /> <textview android:layout_width="match_parent" android:layout_height="wrap_content" android:textsize="30sp" android:id="@+id/tv_main_result" /> <imageview android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/sounth" android:id="@+id/iv_main_images" />
java代码中注释掉的部分都是一种传感器的测试。
mainactivity.java
package com.example.cindy_sounth; 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.rotateanimation; import android.widget.imageview; import android.widget.textview; import java.util.list; public class mainactivity extends appcompatactivity { private sensormanager sensormanager; private sensor sensorlight; private sensor sensoracc; private sensor sensorori; private textview tv_main_result; private mylistner mylistner; private imageview iv_main_images; private float current; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); //得到图片 iv_main_images = (imageview) findviewbyid(r.id.iv_main_images); tv_main_result = (textview) findviewbyid(r.id.tv_main_result); //得到传感器的管理者 sensormanager = (sensormanager)getsystemservice(context.sensor_service); //得到光线传感器 // sensorlight = sensormanager.getdefaultsensor(sensor.type_light); //获得加速度传感器 // sensoracc = sensormanager.getdefaultsensor(sensor.type_accelerometer); //获取风向传感器 sensorori = sensormanager.getdefaultsensor(sensor.type_orientation); mylistner = new mylistner(); } //注册一个监听(监听某一个传感器的值) @override protected void onresume() { super.onresume(); sensormanager.registerlistener(mylistner,sensorori,sensormanager.sensor_delay_ui); } class mylistner implements sensoreventlistener{ private windowmanager.layoutparams layoutparams; //当你的值发生改变 @override public void onsensorchanged(sensorevent event) { float[] f=event.values; //测试获取光线传感器的值(光线值) // float light= f[0]; // tv_main_result.settext(light+""); //测试获得加速度传感器 // float x= f[0]; // float y= f[1]; // float z= f[2]; // tv_main_result.settext("x="+x+"\ny="+y+"\nz="+z); //测试获取风向传感器 // float x= f[0]; // float y= f[1]; // float z= f[2]; // tv_main_result.settext("x="+x+"\ny="+y+"\nz="+z); //加图片测试指南针 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,rotateanimation.relative_to_self,0.5f,rotateanimation.relative_to_self,0.5f); rotateanimation.setduration(200); current=-x; iv_main_images.startanimation(rotateanimation); //改变屏幕的亮度 //先拿到屏幕 // windowmanager.layoutparams layoutparams= getwindow().getattributes(); // layoutparams.screenbrightness=light/225f; // getwindow().setattributes(layoutparams); } //当值发生精度改变 @override public void onaccuracychanged(sensor sensor, int accuracy) { } } @override protected void ondestroy() { super.ondestroy(); sensormanager.unregisterlistener(mylistner); } public void getallsensors(view view){ list<sensor> sensors= sensormanager.getsensorlist(sensor.type_all); for (sensor sensor : sensors) { log.i("test", sensor.getname()); // sensor.getpower(); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。