Android降低第三方应用音频文件的音量

需求:播放其它应用中的音频文件(QQ音乐), 然后播放本应用中的音频文件要求降低之前播放的(QQ音乐)音频的音量

不多解释直接贴代码
public class Main2Activity extends Activity {
    private static final String TAG = "Main2Activity";

    private AudioPlayer mMusicPlayer;

    private AudioAttributes mMusicAudioAttrib;

    MediaPlayer mMediaPlayer;

    private AudioManager mAudioManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.audio);
        mAudioManager = (AudioManager) getSystemService(
                Context.AUDIO_SERVICE);

        //设置音频的属性
        //Content描述的是:这个音频的内容是什么,是语音/音乐
        //Usage用来描述为什么要播放这个音频,是用来导航/闹钟/播放媒体
        mMusicAudioAttrib = new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_MEDIA)
                .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                .build();

	    //第一个参数将需要播放音频文件。第二个参数是音频的属性
        mMusicPlayer = new AudioPlayer( R.raw.xixixi, mMusicAudioAttrib);

        findViewById(R.id.button_media_play_start).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                boolean repeat = true;
                mMusicPlayer.start(repeat, AudioManager.AUDIOFOCUS_GAIN);
            }
        });

        findViewById(R.id.button_media_play_stop).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mMusicPlayer.stop();
            }
        });

    }

    private final AudioManager.OnAudioFocusChangeListener mRadioFocusListener = new AudioManager.OnAudioFocusChangeListener() {
        @Override
        public void onAudioFocusChange(int focusChange) {

            if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) {
                // Pause playback because your Audio Focus was
                // temporarily stolen, but will be back soon.
                // i.e. for a phone call
            } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
                // Stop playback, because you lost the Audio Focus.
                // i.e. the user started some other playback app
                // Remember to unregister your controls/buttons here.
                // And release the kra — Audio Focus!
                // You’re done.
                // am.abandonAudioFocus(afChangeListener);
            } else if (focusChange ==
                    AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {
                // Lower the volume, because something else is also
                // playing audio over you.
                // i.e. for notifications or navigation directions
                // Depending on your audio playback, you may prefer to
                // pause playback here instead. You do you.
                //mMediaPlayer.setVolume(0.3f, 0.3f);
            } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
                // Resume playback, because you hold the Audio Focus
                // again!
                // i.e. the phone call ended or the nav directions
                // are finished
                // If you implement ducking and lower the volume, be
                // sure to return it to normal here, as well.
                //mMediaPlayer.setVolume(1f, 1f);
            }

        }
    };

    private class AudioPlayer {

        private final Uri mUri;
        Context mContext;

        public AudioPlayer(int thz, AudioAttributes mMusicAudioAttrib) {
            mMediaPlayer = new MediaPlayer();
            mMediaPlayer.setAudioAttributes(mMusicAudioAttrib);
            mUri = Uri.parse("android.resource://com.example.myapplication/" + thz);
        }

        public void start(boolean repeat, int audiofocusGain) {
        	//获取音频焦点
            //*AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:获取焦点,告知被剥夺者,你可以继续播放并将音量降为0或者低音量播放
            AudioFocusRequest request = new AudioFocusRequest.Builder(audiofocusGain)
                    .setOnAudioFocusChangeListener(mRadioFocusListener)
                    .setFocusGain(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)
                    .build();
            mAudioManager.requestAudioFocus(request);

            try {
                mMediaPlayer.reset();
                mMediaPlayer.setDataSource(Main2Activity.this, mUri);
                mMediaPlayer.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
            mMediaPlayer.setLooping(repeat);
            mMediaPlayer.start();
        }

        public void stop() {
            Log.d(TAG, "stop: ");
            mMediaPlayer.stop();
            mAudioManager.abandonAudioFocus(mRadioFocusListener);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mAudioManager.abandonAudioFocus(mRadioFocusListener);
    }
}

亲测有效

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值