zoukankan      html  css  js  c++  java
  • Android RingtoneManager 铃声管理

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

  • 相关阅读:
    Computer Vision 基础学习
    PHP遍历文件夹下的文件时遇到中文目录乱码问题
    Note -「模板」矩阵
    Note -「模板」高斯消元
    Solution -「CF113D」Museum
    【更新中】后缀数组学习笔记
    【题解】ABC225F
    【更新中】2021ZR模拟赛要题记录
    【游记】CSP-S-2021
    【题解】#2019 [zr联赛集训day3]史上第四简洁的题面
  • 原文地址:https://www.cnblogs.com/LiaoHao/p/3334047.html
Copyright © 2011-2022 走看看