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机制建立联系。

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

posted @ 2015-07-22 10:47  小白屋  阅读(5242)  评论(0编辑  收藏  举报