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