android摇一摇功能音效与振动附加微信音效大全下载

检测手机摇动通过实现SensorEventListener接口实现

振动通过Vibrator实现

音效通过SoundPool实现

微信各种音效文件下载:微信音效大全

 public class MainShakeActivity extends BaseActivity implements SensorEventListener {
    private static final String TAG="MainShakeActivity";
    ...
    //定义sensor管理器  private SensorManager mSensorManager;
    //震动  private Vibrator mVibrator;
    /**  * 音效  */  SoundPool mSoundPool;
    /**  * 音频id  */  int mSoundId;
    /*存储服务器返回的response*/  MainShakeBean mBean;

    

    @Override
    protected void initData() {
        super.initData();
        //获取传感器管理服务  mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        //震动  mVibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);

         /*摇一摇音效*/  /*public SoundPool(int maxStream, int StreamType, int srcuality)  maxStream —— 同时播放的流的最大数量,即同时能播放音乐的数量上限,具体理解讲看完后文  streamType —— 流的类型,一般都是使用AudioManager.STREAM_MUSIC,表示可以重复播放  srcQuality —— 采样率转化质量,但是现在该功能还不生效,可能以后的Android版本会起作用吧,建意用0*/  mSoundPool= new SoundPool(1, AudioManager.STREAM_SYSTEM, 0);
                /*int load(Context context, int resId, int priority)  参数Context context:略  参数resId:代表资源文件中的音乐文件,如/res/raw/dingdong.ogg文件  参数int priority:API中指出,该参数目前没有效果,建议设置为1。*/  mSoundId=mSoundPool.load(this,R.raw.shake, 1); //第二个参数是音乐资源文件  }

    @Override
    protected void onResume() {
        super.onResume();
        //加速度传感器  //还有SENSOR_DELAY_UI、SENSOR_DELAY_FASTEST、SENSOR_DELAY_GAME等,  //根据不同应用,需要的反应速率不同,具体根据实际情况设定  mSensorManager.registerListener(this,
                mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    protected void onPause() {
        super.onPause();
        /*离开界面解除振动检测*/  mSensorManager.unregisterListener(this);
        /*离开界面取消网络请求*/  client.getRequestQueue().cancelAll(TAG);
        /*离开界面释放音频资源*/  mSoundPool.unload(mSoundId);
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        //当传感器精度改变时回调该方法,Do nothing.  }

    @Override
    public void onSensorChanged(SensorEvent event) {
        // TODO Auto-generated method stub  int sensorType = event.sensor.getType();
        //values[0]:X轴,values[1]:Y轴,values[2]:Z轴  float[] values = event.values;
        if (sensorType == Sensor.TYPE_ACCELEROMETER) {
          /*  *经过测试加速度设置为18的时候摇晃强度比较合理  */  final int ACCELEROMETER=18;
            if ((Math.abs(values[0]) > ACCELEROMETER || Math.abs(values[1]) > ACCELEROMETER || Math.abs(values[2]) > ACCELEROMETER)) {
                ToastUtil.showShortToast(MainShakeActivity.this, "正在努力加载");
                //摇动手机后,再伴随震动提示~~  mVibrator.vibrate(500);
                /*播放摇一摇音效*/  mSoundPool.play(mSoundId, 1, 1, 1, 0, 1);//播放声音  /*网络请求数据*/  /*final int play(int soundID, float leftVolume, float rightVolume, int priority, int loop,floatrate)  播放指定音频的音效,并返回一个streamID,如果失败返回0;  参数soundId: 即SoundPool对象load函数的返回值  参数priority:音频的优先级,值越大优先级高,影响当同时播放数量超出了最大支持数时SoundPool对该流的处理;  SoundPool类的构造函数SoundPool(int maxStream, int StreamType, int srcuality)中参数maxStream指定了  SoundPool对象能同时播音乐文件的最大数量maxStream,所以当使用SoundPool对象循环调用play播放音乐,  如果调用数量超过了maxStream,则就会根据paly中的priority设置的权限来确定哪些被播放,哪些不会被播放。  参数loop: 循环播放的次数,0为值播放一次,-1为无限循环,其他值为播放loop+1次(例如,3为一共播放次)。  参数rate:播放的速率,范围0.5-2.0(0.5为一半速率,1.0为正常速率,2.0为两倍速率)  参数leftVolume:左声道音量, 值在0.0f到1.0之前  参数rightVolume:左声道音量, 值在0.0f到1.0之前*/  shake();
            }
        }
    }

      public void shake() {
       ...
    }

}
当然记得振动需要声明权限:

<uses-permission android:name="android.permission.VIBRATE" />

你可能感兴趣的:(android摇一摇功能音效与振动附加微信音效大全下载)