Chcę zarządzać działaniami związanymi z aplikacją z rozszerzeniem dzisiaj (Widget).Wykonaj akcję w aplikacji hosta z rozszerzenia Dzisiaj (Widget) Bez otwierania aplikacji ios
Pełny opis: w mojej aplikacji zawierającej niektóre działania (np. Odtwarzanie/wstrzymanie dźwięku) działają. I chcesz zarządzać tą akcją również z dzisiejszego rozszerzenia (widgetu). Akcja nadal działa również w tle.
W dniu dzisiejszym zostanie wykonana ta sama czynność. więc jeśli w głównej aplikacji zawierającej już rozpoczyna działanie i wysłać go do stanu w tle, użytkownik może wstrzymać działanie z widgetu. a użytkownik może także rozpocząć/wstrzymać działanie w dowolnym momencie z poziomu widgetu (dzisiejsze rozszerzenie).
Aby osiągnąć ten cel, użyłem UserDefault z funkcją Group app i zapamiętałem jedną wartość boolowską. gdy widżet prezentuje, sprawdza wartość boolowską i ustawia stan przycisku pauza/odtwarzanie. jest ustawiony prawidłowo, ale kiedy naciskam przycisk rozszerzenia, akcja nie działa w aplikacji hosta. Kod
:
w głównym zawierającym kod aplikacji
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
}
W klasie Extension:
@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()
}
notyfikacji nie został zwolniony, gdy domyślny aktualizacje użytkowników. zaktualizowana wartość po ponownym uruchomieniu aplikacji.
, jak rozwiązać ten problem?
i to samo, co chce zrobić w przeciwnych środkach, od umieszczenia aplikacji w widgecie. (łatwy do pojedynczego użytkownika obiekt, ale jak?)
Czy jest jakikolwiek inny sposób na szybkie działanie w zakresie zawierania aplikacji z rozszerzenia bez otwierania aplikacji?
Dokąd wypalanie swoje zgłoszenie? – karthikeyan