Android—處理音訊輸出的硬體

來源:互聯網
上載者:User

本文譯自:http://developer.android.com/training/managing-audio/audio-output.html

使用者在使用Android裝置來播放音頻時,可以有很多選擇。大多數裝置都有內建的擴音器、有線耳機、以及很多支援藍芽串連和A2DP音訊裝置。

檢查使用的音頻播放硬體

你的應用程式行為會受到輸出音訊硬體的影響。

你可以使用以下代碼來查詢AudioManager對象,判斷當前輸出音訊硬體是裝置的擴音器、有線耳機、還是跟裝置串連的藍牙裝置。

if(isBluetoothA2dpOn()){
    // Adjust output forBluetooth.
} else if (isSpeakerphoneOn()) {
    // Adjust output forSpeakerphone.
} else if (isWiredHeadsetOn()) {
    // Adjust output forheadsets
} else {
    // If audio plays andnoone can hear it, is it still playing?
}

在音訊輸出硬體中處理變化

當耳機被拔掉或藍牙裝置連結斷開時,音頻流會被自動的路由到內建的擴音器。如果你在用高音量來聽音樂時發生了這件事,聲音會變得的嘈雜而讓人吃驚。

幸運的是,系統會在發生這件事時發出一個ACTIION_AUDIO_BECOMING_NOISY類型的Intent對象。在播放音頻時,註冊一個監聽這個Intent對象的BroadcastReceiver對象是一個良好的實踐。在播放音樂時,通常使用者期望暫停播放,而在遊戲時則希望降低音量。

privateclassNoisyAudioStreamReceiverextendsBroadcastReceiver{
    @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);
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.