Can';t在swiftui 2.0中捕获蓝牙耳机按钮单击事件
我试图在SwiftUI 2.0应用程序中,只需点击蓝牙耳机按钮即可执行代码,但在尝试了许多不同的代码后,一切都不起作用。。。有人解决了这个问题吗 基于apple文档和我在StackOverflow()上找到的一些答案,我尝试了这个简单的代码Can';t在swiftui 2.0中捕获蓝牙耳机按钮单击事件,swiftui,event-handling,headset,mpremotecommandcenter,Swiftui,Event Handling,Headset,Mpremotecommandcenter,我试图在SwiftUI 2.0应用程序中,只需点击蓝牙耳机按钮即可执行代码,但在尝试了许多不同的代码后,一切都不起作用。。。有人解决了这个问题吗 基于apple文档和我在StackOverflow()上找到的一些答案,我尝试了这个简单的代码 import SwiftUI import MediaPlayer struct ContentView: View { init() { MPRemoteCommandCenter.shared().pauseCommand.is
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文档启用背景音频
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
但一切都失败了
有人会知道我做错了什么,或者会在Swiftui2.0中遇到这样的问题吗
提前感谢您的支持一般来说,您不应该在视图的初始值设定项中执行操作。因为它们代表UI的状态,而不是实际的UI,所以可以在SwiftUI认为需要时对它们进行分解并重新创建
我不在我的电脑上,但是你可能可以为暂停按钮找到一个发布者,你可以用
onReceive
绑定到一个视图。一般来说,你不应该在视图的初始值设定器中执行操作。因为它们代表UI的状态,而不是实际的UI,所以可以在SwiftUI认为需要时对它们进行分解并重新创建
我不在我的电脑上,但你可能可以为暂停按钮找到一个发布者,你可以用
onReceive
将其绑定到视图。最后,我找到了解决问题的方法。
我不知道它背后到底是如何工作的,但音频焦点不在我的应用程序上。因此,我刚刚播放了一秒钟无声的声音,我可以正确地播放播放/暂停按钮。我知道这不是一个合适的解决方案,但它是有效的!
这让我想起了星系s8上的一个类似的虫子。。。
如果我找到一个更好的,我会告诉你的。最后,我找到了解决问题的方法。 我不知道它背后到底是如何工作的,但音频焦点不在我的应用程序上。因此,我刚刚播放了一秒钟无声的声音,我可以正确地播放播放/暂停按钮。我知道这不是一个合适的解决方案,但它是有效的! 这让我想起了星系s8上的一个类似的虫子。。。
如果我找到更好的,我会随时通知你。你好,谢谢你的回复。问题更多的是捕捉事件,而不是传输到视图。但是你是对的,在视图中初始化不是很干净,最初它是在VM中。但即使如此,我也有同样的问题。我想有一件基本的事情我做得不好,但我找不到什么…嗨,谢谢你的回复。问题更多的是捕捉事件,而不是传输到视图。但是你是对的,在视图中初始化不是很干净,最初它是在VM中。但即使如此,我也有同样的问题。我认为有一件基本的事情我做得不好,但我找不到什么。。。
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)
}