使用 ScreenTime API,我有一个带有 2 个按钮操作的屏蔽应用程序:一个用于移除屏蔽并正常打开应用程序,另一个用于保持应用程序屏蔽并打开父应用程序。
有什么方法可以从扩展程序中打开父应用程序吗?
class ShieldActionExtension: ShieldActionDelegate {
override func handle(action: ShieldAction, for application: ApplicationToken, completionHandler: @escaping (ShieldActionResponse) -> Void) {
// Handle the action as needed.
let store = ManagedSettingsStore()
switch action {
case .primaryButtonPressed:
//open parent app
completionHandler(.defer)
case .secondaryButtonPressed:
//remove shield
store.shield.applications?.remove(application)
completionHandler(.defer)
@unknown default:
fatalError()
}
}
目前还无法通过 API 执行此操作。
我使用的一个解决方法是为 ManagedSettings 屏蔽设置 0 秒的阈值。然后,当应用程序打开时,就会达到阈值,并且将调用 DeviceActivityMonitorExtension 的委托方法。在该委托方法中,您可以创建并立即传递本地通知。
用户将收到横幅形式的本地通知,然后可以单击它进入您的应用程序。
这将要求用户 1) 为您的应用启用通知,2) 目前不处于静音模式。
有一些应用程序,例如https://apps.apple.com/us/app/app-lock/id6448239603,可以从屏蔽打开主应用程序。尚未找到获得相同行为的方法。