Android实现摇一摇简单功能
程序员文章站
2022-07-06 14:55:50
说起摇一摇大家可能就会想到微信的摇一摇功能。后来很多app也跟着上了摇一摇的相关功能。这里我们就介绍一下摇一摇怎么做。步骤1:声明一个sensormanager对象步骤2:重写activity的onr...
说起摇一摇大家可能就会想到微信的摇一摇功能。后来很多app也跟着上了摇一摇的相关功能。这里我们就介绍一下摇一摇怎么做。
步骤1:声明一个sensormanager对象
步骤2:重写activity的onresume方法,在该方法中注册传感器监听事件,并指定待监听的传感器类型。
步骤3:重写activity的onpause方法,在该方法中注销传感器事件
步骤4:编写一个传感器事件监听器,该监听器继承自sensoreventlistener,同时需实现onsensorchanged和onaccuracychanged两人方法。其中,前一个方法在感应信息变化时触发,业务逻辑都在这里处理;后一个方法在经度改变时触发,一般无需处理。
代码示例
添加权限
<uses-permission android:name="android.permission.vibrate"/>
mainactivity.java
public class mainactivity extends baseactivity implements sensoreventlistener { private textview tv_sensor; private sensormanager msensormgr;//声明一个传感管理器对象 private vibrator mvibrator;//声明一个震动器对象 @override protected mvcbasemodel getmodelimp() { return null; } @override protected int getcontentlayoutid() { return r.layout.activity_main; } @override protected void initwidget() { tv_sensor = findviewbyid(r.id.tv_sensor); //从系统服务中获取传感管理器对象 msensormgr = (sensormanager) getsystemservice(context.sensor_service); //从系统服务中获取振动器对象 mvibrator = (vibrator) getsystemservice(context.vibrator_service); } @override protected void onpause() { super.onpause(); msensormgr.unregisterlistener(this); } @override protected void onresume() { super.onresume(); msensormgr.registerlistener(this ,msensormgr.getdefaultsensor(sensor.type_accelerometer) ,sensormanager.sensor_delay_normal); } @override public void onsensorchanged(sensorevent event) { if (event.sensor.gettype() == sensor.type_accelerometer){//加速度变更事件 //value[0]:x轴,value[1]:y轴,values[2]:z轴 float[] values = event.values; if ((math.abs(values[0])>15) || math.abs(values[1])>15 || math.abs(values[2])>15){ tv_sensor.settext("恭喜您摇一摇了"+system.currenttimemillis()); //系统检测摇一摇事件后,震动手机提示用户 mvibrator.vibrate(500); } } } //当传感器精度改变时回调该方法,一般无需处理 @override public void onaccuracychanged(sensor sensor, int accuracy) { } }
在实际使用中,我发现系统会出现摇一摇后多次进行回调问题。这里我们可以在一次响应后加锁不再响应。三秒后继续响应。这样可以达到只执行一次相关操作的目的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。