仿照微信摇一摇

摇一摇功能

1、获取传感器管理类

    SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

2、继承SensorEventListener接口,重写传感器监听方法

    @Override
    public void onSensorChanged(SensorEvent event) {
        /**
         * 1、获得传感器类型(如果为加速度传感器,则为摇一摇)
         * 2、判断其加速度大小
         */
        int type = event.sensor.getType();
        if (type != Sensor.TYPE_ACCELEROMETER) {
            return;
        }

        long currentTime = System.currentTimeMillis();
        long diffTime = currentTime - mLastUpdateTime;
        //UPDATE_INTERVAL=100 检测的时间间隔
        if (diffTime < UPDATE_INTERVAL) {
            return;
        }
        mLastUpdateTime = currentTime;
        float x = event.values[0];
        float y = event.values[1];
        float z = event.values[2];
        //mLastX, mLastY, mLastZ 上一次检测时,加速度在x、y、z方向上的分量,用于和当前加速度比较求差。
        float deltaX = x - mLastX;
        float deltaY = y - mLastY;
        float deltaZ = z - mLastZ;
        mLastX = x;
        mLastY = y;
        mLastZ = z;
        float delta = (float) (Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ) / diffTime * 10000);
        // 当加速度的差值大于指定的阈值,认为这是一个摇晃
        if (delta > 500) {
            Message message = Message.obtain();
            message.what = 1;
            mHandler.sendMessage(message);
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }

3、注册监听器

    if (sensorManager != null) {
        Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        if (sensor != null) {
            sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
        }
    }
//  sensorManager.registerListener(listener,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);

4、取消监听器

    sensorManager.unregisterListener(listener);

添加摇一摇声效

1、初始化声音,添加声音文件

    soundPool = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5);//5.0以下使用
    soundId = soundPool.load(context, R.raw.shake_sound, 1);

2、摇晃后播放声音

    soundPool.play(soundId,
            1f, //左声道【0~1】
            1f, //右声道【0~1】
            1,//播放优先级 【0表示优先级最低】
            0,//循环次数 【0为1次,-1为无限次】
            1);//播放速度 0为正常速度【0~2】

添加摇一摇震动

1、初始化类

    Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

2、摇晃后添加震动

    vibrator.vibrate(300);//300milliseconds

注意:添加权限

    <!--摇一摇需要的权限-->
    <uses-permission android:name="android.hardware.sensor.accelerometer" />
    <!--震动所需要的权限-->
    <uses-permission android:name="android.permission.VIBRATE" />





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值