Android利用传感器实现微信摇一摇功能
本文实例为大家分享了android微信摇一摇功能的实现方法,供大家参考,具体内容如下
import java.util.arraylist; import java.util.list; import java.util.random; import android.app.activity; import android.app.service; import android.content.res.resources; import android.hardware.sensor; import android.hardware.sensorevent; import android.hardware.sensoreventlistener; import android.hardware.sensormanager; import android.os.bundle; import android.os.vibrator; import android.view.view; import android.widget.button; //需要实现sensoreventlistener接口 public class loverschoise extends activity implements sensoreventlistener{ button clear; //定义sensor管理器 private sensormanager msensormanager; //震动 private vibrator vibrator; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.loverschoise); //获取传感器管理服务 msensormanager = (sensormanager) getsystemservice(sensor_service); //震动 vibrator = (vibrator) getsystemservice(service.vibrator_service); clear = (button) findviewbyid(r.id.clear); clear.setonclicklistener(new button.onclicklistener(){ @override public void onclick(view arg0) { // todo auto-generated method stub //点击button后,给button按钮设置了text clear.settext("现在给button的text赋值喽~"); }); @override protected void onresume(){ super.onresume(); //加速度传感器 msensormanager.registerlistener(this, msensormanager.getdefaultsensor(sensor.type_accelerometer), //还有sensor_delay_ui、sensor_delay_fastest、sensor_delay_game等, //根据不同应用,需要的反应速率不同,具体根据实际情况设定 sensormanager.sensor_delay_normal); } @override protected void onstop(){ msensormanager.unregisterlistener(this); super.onstop(); } @override protected void onpause(){ msensormanager.unregisterlistener(this); super.onpause(); } @override public void onaccuracychanged(sensor sensor, int accuracy) { // todo auto-generated method stub //当传感器精度改变时回调该方法,do nothing. } @override public void onsensorchanged(sensorevent event) { // todo auto-generated method stub int sensortype = event.sensor.gettype(); //values[0]:x轴,values[1]:y轴,values[2]:z轴 float[] values = event.values; if(sensortype == sensor.type_accelerometer){ /*因为一般正常情况下,任意轴数值最大就在9.8~10之间,只有在你突然摇动手机 *的时候,瞬时加速度才会突然增大或减少。 *所以,经过实际测试,只需监听任一轴的加速度大于14的时候,改变你需要的设置 *就ok了~~~ */ if((math.abs(values[0])>14||math.abs(values[1])>14||math.abs(values[2])>14)){ //摇动手机后,设置button上显示的字为空 clear.settext(null); //摇动手机后,再伴随震动提示~~ vibrator.vibrate(500); } } } }
现在的不少应用都用到了摇动手机改变内容的功能,比如微信中的“摇一摇”功能。前两天要实现这个功能,稍微看了一下关于传感器sensor的内容。
传感器有几种类型:
方向传感器: sensor.type_orientation
加速度(重力)传感器: sensor.type_accelerometer
光线传感器: sensor.type_light
磁场传感器: sensor.type_magnetic_field
距离(临近性)传感器: sensor.type_proximity
温度传感器: sensor.type_temperature
在摇动手机的功能中,我们只用加速度传感器就行了~~
加速度传感器返回值的单位是加速度的单位 m/s^2(米每二次方秒),有三个方向的值分别是
values[0]: x-axis 方向加速度
values[1]: y-axis 方向加速度
values[2]: z-axis 方向加速度
其中x,y,z方向的定义是以水平放置在的手机的右下脚为参照系坐标原点
x 方向就是手机的水平方向,右为正
y 方向就是手机的水平垂直方向,前为正
y 方向就是手机的空间垂直方向,天空的方向为正,地球的方向为负
所以说,你的手机放置的空间位置不同,它三个方向的加速度也不同。在这里,三个方向的加速度,与我们传统意义上的加速度(9.8m/s2)有所区别,需细细品味
以上是摇动手机后清除textview的文字的代码。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。