Ich möchte einige Aktionen in der App von heute Erweiterung (Widget) zu verwalten.Aktion in der Host-App von Heute-Erweiterung (Widget) ohne Öffnen der App IOS
Vollständige beschreibung: in meiner containing app, einige aktionen (wie play/pause audio) durchführen. Und will diese Aktion auch von heute aus (Widget) verwalten. Eine Aktion wird weiterhin im Hintergrund ausgeführt.
In der heutigen Erweiterung wird die gleiche Aktion ausgeführt. Wenn also in der App, die die App enthält, bereits eine Aktion gestartet und in den Hintergrundzustand versetzt wird, kann ein Benutzer die Aktion von einem Widget anhalten. und der Benutzer kann die Aktion auch jederzeit über das Widget (heutige Erweiterung) starten/pausieren.
Um dieses Ziel zu erreichen, habe ich UserDefault mit App Group-Fähigkeit verwendet und einen booleschen Wert gespeichert. Wenn das Widget vorhanden ist, prüft es den booleschen Wert und setzt den Knopfstatus play/pause. Es ist richtig eingestellt, aber wenn ich die Taste drücken, funktioniert die Aktion nicht in der Host-App.
Code:
in Haupt enthält App-Code
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
}
In Erweiterung Klasse:
@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")
}
sharedDefaults?.synchronize()
}
Meldung wurde nicht ausgelöst, wenn ein Standardbenutzer-Updates. Der Wert wird aktualisiert, wenn die App neu gestartet wird.
so, wie dieses Problem zu lösen?
und das gleiche möchte im Gegensatz dazu bedeutet, App zu einem Widget zu halten. (einfach zu Single-Action-Objekt, aber wie?)
Und ist eine andere Möglichkeit, eine schnelle Aktion in der App von der Erweiterung ohne App zu öffnen durchzuführen?
Wo feuern Sie Ihre Mitteilung? – karthikeyan