说起摇一摇大家可能就会想到微信的摇一摇功能。后来很多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) {
}
}
在实际使用中,我发现系统会出现摇一摇后多次进行回调问题。这里我们可以在一次响应后加锁不再响应。三秒后继续响应。这样可以达到只执行一次相关操作的目的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
疯子84045784