zoukankan      html  css  js  c++  java
  • RingtoneManager-获得系统当前的铃声

    我们直接看代码

    bt1 = (Button) findViewById(R.id.bt1);
            bt2 = (Button) findViewById(R.id.bt2);
            bt3 = (Button) findViewById(R.id.bt3);
            bt2.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    //获得手机提示音
                    if (mNotificationUri_notify == null) {
                        mNotificationUri_notify = RingtoneManager
                                .getActualDefaultRingtoneUri(MainActivity.this,
                                        RingtoneManager.TYPE_NOTIFICATION);
                    }
                    if (mNotificationUri_notify != null && mRingtone_notify == null) {
                        String string = mNotificationUri_notify.toString();
                        tv.setText(string);
                        mRingtone_notify = RingtoneManager.getRingtone(
                                getApplicationContext(), mNotificationUri_notify);
    
                    }
    
                    if (mRingtone_notify != null) {
                        if (mRingtone_notify.isPlaying()) {
                            mRingtone_notify.stop();
                        } else {
                            mRingtone_notify
                                    .setStreamType(AudioManager.STREAM_NOTIFICATION);
                            mRingtone_notify.play();
                        }
                    }
                }
            });
            bt1.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                    //获得手机来电铃声
                    if (mNotificationUri_telephone == null) {
                        mNotificationUri_telephone = RingtoneManager
                                .getActualDefaultRingtoneUri(MainActivity.this,
                                        RingtoneManager.TYPE_RINGTONE);
                    }
    
                    if (mNotificationUri_telephone != null
                            && mRingtone_telephone == null) {
                        mRingtone_telephone = RingtoneManager
                                .getRingtone(getApplicationContext(),
                                        mNotificationUri_telephone);
                    }
    
                    if (mRingtone_telephone != null) {
                        if (mRingtone_telephone.isPlaying()) {
                            mRingtone_telephone.stop();
                        } else {
                            mRingtone_telephone
                                    .setStreamType(AudioManager.STREAM_RING);
                            mRingtone_telephone.play();
                        }
                    }
    
                }
            });
            bt3.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                    if (mNotificationUri_alarm == null) {
                        //获得手机闹钟铃声
                        mNotificationUri_alarm = RingtoneManager
                                .getActualDefaultRingtoneUri(MainActivity.this,
                                        RingtoneManager.TYPE_ALARM);
                    }
                    if (mNotificationUri_alarm != null && mRingtone_alarm == null) {
                        mRingtone_alarm = RingtoneManager.getRingtone(
                                getApplicationContext(), mNotificationUri_alarm);
                    }
    
                    if (mRingtone_alarm != null) {
                        if (mRingtone_alarm.isPlaying()) {
                            mRingtone_alarm.stop();
                        } else {
                            mRingtone_alarm
                                    .setStreamType(AudioManager.STREAM_ALARM);
                            mRingtone_alarm.play();
                        }
                    }
    
                }
    
            });

    上面的代码就是获得手机三个铃声的代码。

    其实,获得手机铃声的操作也很简单。

    它主要就涉及两个类

    1.RingtoneManager-铃声管理类

    2.Ringtone-铃声操作类

    基本上就是三个步骤

    1.获得Uri

    获得Uri的方法,需要传入一个参数 RingtoneManager.TYPE_NOTIFICATION(STREAM_NOTIFICATION..)就是

    这个参数决定了我们获得的是何种提示音

    2.获得Ringtone

    获得它的方法需要把第一步得到的Uri传进来,就可以得到相应的铃声了

    3.操作铃声

    直接只用play() stop()控制铃声的停止跟播放。

    上面有一个方法

    mRingtone_alarm.setStreamType(AudioManager.STREAM_ALARM);

    说是设置音频流的,这个音频流到底是什么东西,也不懂,就看到有人说

     Android Framework的音频子系统中,每一个音频流对应着一个AudioTrack类 的一个实例,每个AudioTrack会在创建时注册到AudioFlinger中,由AudioFlinger把所有的AudioTrack进行混合 (Mixer),然后输送到AudioHardware中进行播放。AudioTrack和AudioFlinger的通信机制通 常,AudioTrack和AudioFlinger并不在同一个进程中,它们通过android中的binder机制建立联系。

    自己查了下资料,感觉应该就是控制什么音频解析的吧

  • 相关阅读:
    3. 技术专题
    3. 技术专题
    1. 个人经验总结
    2. 阿里巴巴Java开发手册主题
    自动化构建工具演化、对比、总结
    2. 阿里巴巴Java开发手册主题
    (转)高并发高流量的大型网站架构设计(二)
    (转)高并发高流量的大型网站架构设计(一)
    (转)可伸缩性最佳实践:来自eBay的经验
    (转)Application, Session, Cookie, Viewstate, Cache对象用法和区别
  • 原文地址:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_ringtone_15722104.html
Copyright © 2011-2022 走看看