簡體   English   中英

為什么不同的藍牙揚聲器在AVAudioSession(IOS)方面表現不同

[英]Why would different bluetooth speakers behave differently with respect to AVAudioSession (IOS)

我有一個播放音頻的應用程序。

我試圖在發布應用程序之前照顧好所有“邊緣情況”。

如您所知...播放音頻的應用程序需要告訴IOS系統它們打算如何工作。 他們的音頻會中斷其他應用程序嗎? 它們是否與其他應用程序混合? 等等等

因此,該應用程序需要正確設置其AVAudioSession代碼...根據蘋果的文檔,我這樣做了:

import UIKit
import AVFoundation

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        // Override point for customization after application launch.

        let audioSession = AVAudioSession.sharedInstance()
        do {
            try audioSession.setCategory(AVAudioSessionCategoryPlayback)
        } catch {
            print("Setting category to AVAudioSessionCategoryPlayback failed.")
        }

        do {
            try audioSession.setActive(true)
        } catch {

            print("Setting AudioSession active failed.")

        }
        // Other project setup
        return true
    }

}

想象以下測試:

1)打開藍牙並連接到藍牙揚聲器。

2)加載一個在后台播放音頻的知名應用,例如Spotify。 播放歌曲/音頻並將其作為背景。

3)當APP B的音頻仍在播放時,加載APP A(我的應用程序)並按三個按鈕中的任何一個。

那么...執行第3步后,會發生什么?

好吧,這取決於您使用的是什么...例如:

  • 如果您僅使用電話揚聲器(而不是外部藍牙揚聲器),則一切正常。

  • 例如,如果您使用的是ION Tailgater iPA77藍牙揚聲器,一切都會按預期運行。

  • 但是,例如,如果您使用的是MTX MUDHSB-B藍牙揚聲器,則按三個按鈕中的任何一個都不會發生...直到繼續等待和/或按按鈕看似任意的時間(大約30秒)...,然后聲音就會開始傳出並正常運轉。

一個藍牙揚聲器的行為與另一個藍牙揚聲器的行為有何不同(大概在AVAudioSession方面)? 藍牙是藍牙吧? 我猜不會。 誰能闡明這一點?

謝謝。

聽起來好像是揚聲器出現問題...您是否使用2個非您自己的應用嘗試了相同的情況? 例如Spotify和Apple Music?

您需要將AVAudioSessionCategoryOption清除為AVAudioSessionCategoryOptionMixWithOthers

如果您查看文檔 ,則在底部看到以下內容:

如果清除此選項,則激活會話會中斷其他音頻會話。 如果設置此選項,則您的應用程序的音頻會與在后台應用程序(例如“音樂”應用程序)中播放的音頻混合在一起。

根據您的代碼,另一種選擇是您在設置類別后不激活音頻會話:

audioSession.setActive(true)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM