Android音频和震动的基本实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linzhihan7410/article/details/53510834

Android为音频和震动功能提供了两个类:
MediaPlayer 播放器类
Vibrator 震动类

实现效果:打开应用时,播放一段音乐并且震动
(这里没有用按键做操作停止播放,继续播放,可以使用MediaPlayer.start()以及MediaPlayer.pause()做播放和暂停(暂停这里需要记录播放的时长))

音频流程 inits():
零.在res目录下创建raw目录,放入准备好的ogg音频文件
一.设定蜂鸣器类型(声音的类型)
二.得到系统服务Context.AUDIO_SERVICE
三.判断静音情况下dosomething
四.创建播放器对象,设置播放器声音类型
五.得到多媒体文件AssetFileDescriptor
六.设置多媒体数据源,之后要记住close掉AssetFileDescriptor文件
七,设置循环播放,并开始播放

震动流程 initVibrate():
一.创建Vibrator对象并得到系统服务Context.VIBRATOR_SERVICE
二.开始震动并设置震动时长,是否循环vibrator.vibrate();

代码:

public class MainActivity extends Activity {

    private static  final float BEEP_VOLUME = 0.70f;    //定义声音的大小 记住要加上f
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        inits();
        initVibrate();
    }
    //蜂鸣器,声音
    private void inits() {
        //设定蜂鸣器类型(声音的类型)
        this.setVolumeControlStream(AudioManager.STREAM_MUSIC);                                     //设置为音乐回放就是媒体音量
        AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);    //得到系统服务Context.AUDIO_SERVICE
        if(audioManager.getRingerMode()!=AudioManager.RINGER_MODE_NORMAL){                          //如果是静音情况下,不做任何事情
            Toast.makeText(this,"手机已经静音,请取消静音后再重新打开",Toast.LENGTH_SHORT).show();
            return;
        }
        MediaPlayer mediaPlayer = new MediaPlayer();                    //播放器对象
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);      //设置播放器音乐类型
        /*mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                mediaPlayer.seekTo(5000);  //设置从5s开始播放 并没有起到作用
            }
        });*/
        AssetFileDescriptor fileDescriptor = this.getResources().openRawResourceFd(R.raw.shenwu);//得到fileDescriptor文件,即多媒体文件
        //数据源
        try {   //设置多媒体数据源
           mediaPlayer.setDataSource(
                   fileDescriptor.getFileDescriptor(),
                   fileDescriptor.getStartOffset(),
                   fileDescriptor.getLength());
            fileDescriptor.close();                         //释放资源
            mediaPlayer.setVolume(BEEP_VOLUME,BEEP_VOLUME); //设置左声道,右声道的音量
            mediaPlayer.prepare();                          //准备好了
        }catch (IOException e){
            mediaPlayer = null;                             //如果出现异常,释放资源
        }
        mediaPlayer.setLooping(true);                       //循环播放
        mediaPlayer.start();                                //开始
    }
    //震动效果   记住加权限android.permission.VIBRATE
    private void initVibrate(){
        Vibrator vibrator = (Vibrator) this.getSystemService(Context.VIBRATOR_SERVICE); //得到系统震动服务
        vibrator.vibrate(new long[]{1000,2000},0);                                        //设置震动的时长 这里是等待1秒,震动2秒 0表示循环
        /*只有1个参数的时,第一个参数用来指定振动的毫秒数。
        要传递2个参数的时候,第1个参数用来指定振动时间的样本,第2个参数用来指定是否需要循环.
        振动时间的样本是指振动时间和等待时间的交互指定的数组.
        */

        vibrator.cancel();
    }
}

猜你喜欢

转载自blog.csdn.net/linzhihan7410/article/details/53510834