zoukankan      html  css  js  c++  java
  • 【Android Developers Training】 46. 处理音频外放设备

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。

    原文链接:http://developer.android.com/training/managing-audio/audio-focus.html


    当用户希望从Android设备欣赏音频时,他将会有狠多选择。大多数设备有内置的喇叭,以及有线耳机的插孔,还有很多支持A2DP音频的蓝牙连接设备。


    一). 检查哪个硬件在被使用

    你的应用是如何表现的可能会被外放被引导至什么硬件设备所影响。

    你可以通过查询AudioManager来确定现在的音频是被引导至扩音器,有线耳机还是蓝牙设备。如下所示:

    if (isBluetoothA2dpOn()) {
        // Adjust output for Bluetooth.
    } else if (isSpeakerphoneOn()) {
        // Adjust output for Speakerphone.
    } else if (isWiredHeadsetOn()) {
        // Adjust output for headsets
    } else { 
        // If audio plays and noone can hear it, is it still playing?
    }

    二). 处理音频外放设备的改变

    当没有插入耳机,也没有蓝牙设备连接,音频流会自动的引导至扩音器。如果你听音乐时喜欢吧音量调的像我一样高,那么你可能会被吵闹声惊吓到。

    幸运的是,当这种情况发生时,系统会广播一个ACTION_AUDIO_BECOMING_NOISY行为的intent。注册一个广播接收器(BroadcastReceiver)来监听这一intent是一个很好的习惯,不管你是否在播放音乐。对于音乐播放器来说,用户一般期望播放被停止,二对于游戏来说,你可能会选择显著降低音量。

    private class NoisyAudioStreamReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) {
                // Pause the playback
            }
        }
    }
    
    private IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY);
    
    private void startPlayback() {
        registerReceiver(myNoisyAudioStreamReceiver(), intentFilter);
    }
    
    private void stopPlayback() {
        unregisterReceiver(myNoisyAudioStreamReceiver);
    }
  • 相关阅读:
    第八周上机作业
    第七次作业
    第七周上机
    第六周作业
    4.9上机作业
    第五周作业
    第四周作业
    第二次上机作业
    第三周作业
    第九周上机练习
  • 原文地址:https://www.cnblogs.com/jdneo/p/3492964.html
Copyright © 2011-2022 走看看