private void startAlarm() throws IllegalStateException, IOException { mMediaPlayer = MediaPlayer.create(this, getSystemDefultRingtoneUri()); mMediaPlayer.setLooping(true);//设置循环 mMediaPlayer.prepare(); mMediaPlayer.start(); } //获取系统默认铃声的Uri private Uri getSystemDefultRingtoneUri() { return RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE); }
发现了个问题,因为startAlarm是throw一个异常,在方法外面捕获异常无济于事(不会播放铃声),要在真正需要的地方捕获异常,所以重新重构了一下:
private void startAlarm() { mMediaPlayer = MediaPlayer.create(this, getSystemDefultRingtoneUri()); mMediaPlayer.setLooping(true); try { mMediaPlayer.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } mMediaPlayer.start(); }