仿照微信摇一摇

摇一摇功能

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

注意:添加权限

   
   
   
   





你可能感兴趣的:(android基础)