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();    }}

更多相关文章

  1. Android中Intent传递自定义对象类型的数据
  2. android静音的实现
  3. Android(安卓)Log系统详解
  4. Android在开发中的实用技巧之Parcelable的使用以及如何传递复杂
  5. Kotlin, Android的Swift
  6. Android的事件类型及事件处理机制
  7. Android应用资源---绘制资源类型(Drawable)(一)
  8. Android(安卓)中 EventBus 的使用
  9. Android动态界面开发框架Tangram使用完整教程

随机推荐

  1. 选择器的优先级,id,class,tag
  2. 十年软件测试感悟
  3. 2021春招 ,百度,阿里,美团等大厂全新PHP面试
  4. HTML中表格和表单的应用实例 (MD)
  5. CSS选择器优先级、模块化与伪类选择器的
  6. 学web前端有什么计划?
  7. NA公链(Nirvana)NAC公链独步公链江湖
  8. 助力你的年度大戏:“金三银四”的折腾
  9. “金三银四”的折腾之聊一聊面试
  10. 高效、易用、功能强大的 api 管理平台