美文网首页
Android之音频焦点

Android之音频焦点

作者: 江南皮皮 | 来源:发表于2018-07-18 19:12 被阅读0次

Android之音频焦点

车机开发很多应用涉及到音频,音频焦点踩过很多坑,也填过很多坑,蓝牙,多媒体音视频,ipod,收音机,导航...很多功能都需要对音频做响应的处理。如果我们每个人都按照自己的想法去处理音频焦点的话,整个逻辑就非常的混乱,还好Android有一套比较规范的音频焦点处理逻辑及其方法。

直接上关键源码。由于项目的源码不方便提取出来所以就但是写了个服务,核心内容都写在这个内里面。

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.AudioManager.OnAudioFocusChangeListener;
import android.os.IBinder;
 
public class AudioService extends Service{
    private AudioManager mAudioManager;
 
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public void onCreate() {
        initData();
        super.onCreate();
    }
    private void initData() {
        mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    }
    public boolean requestFocus(){
        if(afChanggeListener != null ){
            /**
             * requestAudioFocus()方法的三个参数
             * 第一个参数,音频焦点变化时的监听器
             * 第二个参数,音频类型,包含AUDIO_STREAM_MUSIC ,AUDIO_STREAM_ALARM ...
             * 第三个参数,音频焦点类型,AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK,AUDIOFOCUS_GAIN...
             */
            return AudioManager.AUDIOFOCUS_REQUEST_GRANTED == mAudioManager.requestAudioFocus(afChanggeListener, AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN);
        }
        return false;
        
    }
    public boolean abandonFocus(){
        if(afChanggeListener != null){
            return AudioManager.AUDIOFOCUS_REQUEST_GRANTED == mAudioManager.abandonAudioFocus(afChanggeListener);
        }
        return false;
    }
    
    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }
    @Override
    public void onDestroy() {
        //适当的时候注销监听器
        abandonFocus();
        super.onDestroy();
    }
    
    OnAudioFocusChangeListener afChanggeListener = new OnAudioFocusChangeListener() {
        
        @Override
        public void onAudioFocusChange(int focusChange) {
            switch (focusChange) {
            case AudioManager.AUDIOFOCUS_LOSS:
                //长时间的失去焦点,注意结束相关音频播放同时释放资源
                break;
            case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                //短暂的失去音频焦点,但是你可以与新的使用者共同使用音频焦点(混音输出)
            case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                //短暂的失去音频焦点并且会很快再次获得,你可以执行暂停操作,不用释放资源
                break;
            case AudioManager.AUDIOFOCUS_GAIN:
                //获得(或者重新获得)音频焦点。
                break;
            }
            
        }
    };
 
}

相关文章

  • Android 音频焦点

    由于Android系统存在多个发声应用同时运行的情况,如收听音乐过程中,接听到蓝牙电话,为了避免从听筒出来的声音不...

  • Android之音频焦点

    Android之音频焦点 车机开发很多应用涉及到音频,音频焦点踩过很多坑,也填过很多坑,蓝牙,多媒体音视频,ipo...

  • Android -音频焦点处理

    因为系统中可能会有多个应用程序会播放音频,所以需要考虑他们之间该如何交互,为了避免多个应用程序同时播放音乐,...

  • Android 音频焦点处理

    刚开始的时候,认为在智能机中,每个 APP 都是各自管各自的,媒体播放也是这样子的;然而对比同类产品,发现同类产品...

  • Android音频焦点处理方法

    前两天在项目上做了对音频焦点使用方法的一个总结,记录在下面。 在Android设备上,默认可以有多个应用同时播放音...

  • Android 音频焦点(Audio Focus)

    Android 音频焦点(Audio Focus) 引子 说 Audio Focus 前先说个很简单需求:来电时暂...

  • Android音频焦点AudioFocus使用

    Android开发中免不了需要播放视频,音频文件,但是手机上可能有其他的一些软件,在后台播放音频的时候,这个时候另...

  • Android音频焦点详解(上)

    转载请注明出处:http://www.jianshu.com/p/5d8d7b677690 2017年开年第一篇博...

  • Android VidowView音频焦点问题

    前言 好久没有发布文章了,整个5月底6月初的状态都在准备复习与面试的路上,最终选择了一家薪资待遇都不错的公司。之后...

  • Android音频开发(1):音频基础知识

    Android 音频开发 目录 Android音频开发(1):音频相关知识 Android音频开发(2):使用Au...

网友评论

      本文标题:Android之音频焦点

      本文链接:https://www.haomeiwen.com/subject/yamopftx.html