昊仔

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

对于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);
    }

posted on 2013-09-22 23:15  昊仔  阅读(5682)  评论(1编辑  收藏  举报