我想在今天的扩展程序(Widget)中管理包含app的一些操作.
完整描述:在我的包含应用程序中,执行一些操作(如播放/暂停音频).并希望从今天的扩展(小部件)管理该操作.动作也继续在后台状态下执行.
在今天的扩展中,将执行相同的操作.因此,如果在主要包含应用程序中已经启动操作并将其发送到后台状态,则用户可以暂停窗口小部件的操作.并且用户还可以随时从小部件(今天的扩展)开始/暂停操作.
为了实现这个目标,我使用UserDefault和app Group功能并存储一个布尔值.当小部件出现时,它检查布尔值并设置按钮状态播放/暂停.它设置正确,但当我按下扩展按钮时,操作无法在主机应用程序中执行.
码:
在主要包含应用程序代码
override func viewDidLoad() {
super.viewDidLoad()
let objUserDefault = UserDefaults(suiteName:"group.test.TodayExtensionSharingDefaults")
let objTemp = objUserDefault?.object(forKey: "value")
self.btnValue.isSelected = objTemp
NotificationCenter.default.addObserver(self, selector: #selector(self.userDefaultsDidChange), name: UserDefaults.didChangeNotification, object: nil)
}
func userDefaultsDidChange(_ notification: Notification) {
let objUserDefault = UserDefaults(suiteName: "group.test.TodayExtensionSharingDefaults")
objUserDefault?.synchronize()
let objTemp = objUserDefault?.object(forKey: "value")
self.btnValue.isSelected = objTemp
}
Run Code Online (Sandbox Code Playgroud)
在扩展类中:
@IBAction func onPlayPause(_ sender: UIButton) {
DispatchQueue.main.async {
let sharedDefaults = UserDefaults(suiteName: "group.test.TodayExtensionSharingDefaults")
if let isPlaying = sharedDefaults?.bool(forKey: "isPlaing") {
sharedDefaults?.set(!isPlaying, forKey: "isPlaying")
}else{
sharedDefaults?.set(false, forKey: "isPlaying") …Run Code Online (Sandbox Code Playgroud) 我想同时录制视频和播放音频.当开始录制视频,预加载音频开始播放和停止视频录制时,音频也会停止播放.
我尝试使用第三方库" SwiftyCam "(https://github.com/Awalz/SwiftyCam)录制视频,并在开始写视频录制文件时以委托方式开始播放音频.
主ViewCOntroller代码如下:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
var temp = Data()
let audioPath = Bundle.main.path(forResource: "ab1-FAST", ofType: "mp3")
temp = FileManager.default.contents(atPath: (audioPath)!)!
do {
player = try AVAudioPlayer(data: temp)
}
catch let error {
print(error)
}
self.configureAudioSession()
player!.delegate = self
self.player!.prepareToPlay()
}
// MARK: -
// MARK: - SwiftyCamViewControllerDelegate method
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didBeginRecordingVideo camera: SwiftyCamViewController.CameraSelection) {
self.player?.play()
}
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didFinishRecordingVideo camera: SwiftyCamViewController.CameraSelection)
{
if self.player != nil{
if …Run Code Online (Sandbox Code Playgroud)