zoukankan      html  css  js  c++  java
  • Android音频焦点处理相关的方法

    有这么一种场景:你打开qq音乐、优酷客户端、视频播放的时候。这个时候突然来电显示了,此时所有的MediaPlayer相关的服务或者响应都进入“休眠”状态。那么,这个功能是怎么实现的呢?看到这篇文章的时候,原理其实很简单。只修要复制下面的d代码就能完成这个功能。

    1、首先要创建一个AudioManager

    //创建audioManger
    AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
    例如你在服务里面的onCreate方法里面完成的上面操作的。

    2、让你的服务实现OnAudioFocusChangeListener接口:

    例如:

    public class AudioService extends Service implements OnAudioFocusChangeListener

    3、实现该接口回调的方法。

    /**---------------音频焦点处理相关的方法---------------**/
    @Override
    public void onAudioFocusChange(int focusChange) {
        switch (focusChange) {
        case AudioManager.AUDIOFOCUS_GAIN://你已经得到了音频焦点。 
            System.out.println("-------------AUDIOFOCUS_GAIN---------------");
            // resume playback
            mPlayer.start();
            mPlayer.setVolume(1.0f, 1.0f);
            break;
        case AudioManager.AUDIOFOCUS_LOSS://你已经失去了音频焦点很长时间了。你必须停止所有的音频播放
            System.out.println("-------------AUDIOFOCUS_LOSS---------------");
            // Lost focus for an unbounded amount of time: stop playback and release media player
            if (mPlayer.isPlaying())
                mPlayer.stop();
            mPlayer.release();
            mPlayer = null;
            break;
        case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT://你暂时失去了音频焦点
            System.out.println("-------------AUDIOFOCUS_LOSS_TRANSIENT---------------");
            // Lost focus for a short time, but we have to stop
            // playback. We don't release the media player because playback
            // is likely to resume
            if (mPlayer.isPlaying())
                mPlayer.pause();
            break;
        case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK://你暂时失去了音频焦点,但你可以小声地继续播放音频(低音量)而不是完全扼杀音频。
            System.out.println("-------------AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK---------------");
            // Lost focus for a short time, but it's ok to keep playing
            // at an attenuated level
            if (mPlayer.isPlaying())
                mPlayer.setVolume(0.1f, 0.1f);
            break;
        }
    
    }
    简单的三步,就完成了一个强大的功能。


    喜欢可以关注本博客哦~不定义更新简单有趣的Android小文

  • 相关阅读:
    java实现简单web服务器(分析+源代码)
    Java中常见的5种WEB服务器介绍
    Android ViewDragHelper完全解析 自定义ViewGroup神器
    设置SVN,Git忽略MAC的.DS_Store文件的方法
    Android中图片大小和屏幕密度的关系讲解
    Android组件化方案及组件消息总线modular-event实战
    机器学习在美团配送系统的实践:用技术还原真实世界
    智能支付稳定性测试实战
    数据库智能运维探索与实践
    【人物志】技术十年:美团第一位前端工程师潘魏增
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299515.html
Copyright © 2011-2022 走看看