欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现摇一摇简单功能

程序员文章站 2022-04-06 21:17:52
说起摇一摇大家可能就会想到微信的摇一摇功能。后来很多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) {
 
  }
}

在实际使用中,我发现系统会出现摇一摇后多次进行回调问题。这里我们可以在一次响应后加锁不再响应。三秒后继续响应。这样可以达到只执行一次相关操作的目的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关标签: Android 摇一摇