Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t在swiftui 2.0中捕获蓝牙耳机按钮单击事件_Swiftui_Event Handling_Headset_Mpremotecommandcenter - Fatal编程技术网

Can';t在swiftui 2.0中捕获蓝牙耳机按钮单击事件

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

我试图在SwiftUI 2.0应用程序中,只需点击蓝牙耳机按钮即可执行代码,但在尝试了许多不同的代码后,一切都不起作用。。。有人解决了这个问题吗

基于apple文档和我在StackOverflow()上找到的一些答案,我尝试了这个简单的代码

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)
        }