對於android系統中鈴聲的播放,Ringtone提供了播放鈴聲、提示音的快速方法,通常和RingtoneManager配合使用。RingtoneManager在系統中維護着一個鈴聲數據庫。
RingtoneManager管理來電鈴聲(TYPE_RINGTONE)、提示音(TYPE_NOTIFICATION)、鬧鍾鈴聲(TYPE_ALARM)等,在本質上,Ringtone是對MediaPlayer的再封裝。
Ringtone的常用方法包括:
getTitle() //獲取鈴聲名
isPlaying() //判斷是否正在播放
play() //開始播放
stop() //停止播放
RingtoneManager的常用方法包括:
getRingtone() //獲取鈴聲
setActualDefaultRingtoneUri() //為某一鈴聲類型設置默認鈴聲
getDefaultUri() //獲取某一鈴聲類型的默認鈴聲
下面是利用RingtoneManager和Ringtone來播放鈴聲的實現過程。
代碼:Ringtone對鈴聲的播放
import android.media.AudioManager;
import android.media.Ringtone;
import android.media.RingtoneManager;
……
private RingtonePickerActivity mActivity;
private RingtoneManager mRingtoneManager;
private AudioManager mAudioManager;
……
mActivity=getActivity();
mRingtoneManager=new RingtoneManager(mActivity); //創建鈴聲管理器
mAudioManager=(AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); //備份鈴聲設置
mOriginalVolume=mAudioManager.getStreamVolume(AudioManager.STREAM_RING);
mDefaultUri=RingtoneManager.getActualDefaultRingtoneUri(mContext,
RingtoneManager.TYPE_RINGTONE); //獲取默認鈴聲
int maxVolume=mAudioManager.getStreamMaxVolume(AudioManager.STREAM_RING);
mAudioManager.setStreamVolume(AudioManager.STREAM_RING, maxVolume/2,
AudioManager.FLAG_ALLOW_RINGER_MODES);
mRingtoneManager.setType(RingtoneManager.TYPE_ALARM); //設置鈴聲類型
Ringtone r=mRingtoneManager.getRingtone(0); //獲得鈴聲句柄
ringtone.play(); //播放鈴聲
在Ringtone中,對DRM提供了默認的支持, 利用setStreamType()方法可以設置流類型,利用isPlaying()方法可以判斷流的播放狀態。
如果希望獲得鈴聲列表,可以通過Action為ACTION_RINGTONE_PICKER的Intent進行,
實現過程如下:
代碼:獲取鈴聲列表
private void doPickRingtone()
{
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
//允許設置默認鈴聲
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
/ 僅顯示TYPE_RINGTONE類型
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
// 不顯示靜音
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
Uri ringtoneUri;
if (mCustomRingtone != null) {
ringtoneUri = Uri.parse(mCustomRingtone);
} else {
ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
}
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtoneUri);
startActivityForResult(intent, RINGTONE_PICKED);
}