1

我试图在 SwiftUI 2.0 应用程序中单击蓝牙耳机按钮来简单地执行代码,但是在尝试了许多不同的代码之后,没有任何效果......有人解决了这个问题吗?

基于苹果文档和我在 StackOverflow ( https://stackoverflow.com/a/58249502/13207818 ) 上找到的一些答案,我尝试了这个简单的代码

import SwiftUI
import MediaPlayer

struct ContentView: View {
    init() {
        MPRemoteCommandCenter.shared().pauseCommand.isEnabled = true
        MPRemoteCommandCenter.shared().pauseCommand.addTarget(handler: { (event) in
            print("Pause")
            return MPRemoteCommandHandlerStatus.success
        })
        
        MPRemoteCommandCenter.shared().playCommand.isEnabled = true
        MPRemoteCommandCenter.shared().playCommand.addTarget(handler: { (event) in
            print("Play")
            return MPRemoteCommandHandlerStatus.success
        })
        
        MPRemoteCommandCenter.shared().togglePlayPauseCommand.addTarget (handler: { (event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus in
            // middle button (toggle/pause) is clicked
            print("event:", event.command)
            return .success
        })
    }
    
    var body: some View {
        Text("Hello World")
    }
}

当然根据Apple doc启用背景音频

<key>UIBackgroundModes</key>
    <array>
        <string>audio</string>
    </array>

甚至尝试激活我的应用音频会话:

do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playAndRecord, mode: .default, options: [.duckOthers, .allowBluetooth, .allowBluetoothA2DP])
            try AVAudioSession.sharedInstance().setActive(true, options: .notifyOthersOnDeactivation)
            print("audioSession is Active")
        } catch {
            print("audioSession properties weren't set because of an error.")
            print(error)
        }

但一切都失败了……

有人会知道我做错了什么,还是会遇到 swiftUI 2.0 的此类问题?

预先感谢您的支持

4

2 回答 2

0

一般来说,您不应该在视图的初始化程序中执行操作。由于它们代表 UI 的状态,而不是实际的 UI,因此只要 SwiftUI 认为需要,它们就可以被分解并再次创建。

我不在我的电脑上,但您可能可以获得暂停按钮的发布者,您可以将其绑定到视图onReceive

于 2020-12-15T17:49:58.380 回答
0

最后,我为我的问题找到了解决方案。我不知道它是如何真正落后的,但音频焦点不在我的应用程序上。所以我刚刚播放了一秒钟的静音,我可以用我的播放/暂停按钮正常播放。我知道这不是一个合适的解决方案,但它有效!这让我想起了 Galaxy s8 上的一个类似错误……如果我找到更好的错误,我会及时通知你。

于 2020-12-16T16:22:26.007 回答