如果正在使用我的小部件,如何查询 WidgetKit?

Posted

技术标签:

【中文标题】如果正在使用我的小部件,如何查询 WidgetKit?【英文标题】:How to query WidgetKit if my widgets are being used? 【发布时间】:2020-12-15 22:59:29 【问题描述】:

我想检查用户是否将我的小部件添加到主屏幕,是否有用于此的 API?我找不到一个。 WidgetCenter.getCurrentConfigurations 返回应用提供的所有可用小部件,而不是使用过的小部件。

我寻找这样一个 API 的原因是:

    我想报告小部件的使用情况。 我想决定当应用中发生状态更改时是否应通过WidgetCenter 触发时间线重新加载。

【问题讨论】:

你能解决这个问题吗? widgetCenter.getCurrentConfigurations 不会得到应用程序使用的吗? ,这是我目前看到的。 这是我尝试时看到的,但从那时起已经有一段时间了。我不确定该方法的行为是否发生了变化,或者苹果是否提出了另一种实现我们想要的方法。我不知道目前的情况,但我们无法找到解决方案。 【参考方案1】:

方法WidgetCenter.shared.getCurrentConfigurations 确实返回用户配置的小部件的数量:

WidgetCenter.shared.getCurrentConfigurations  widgets 
    if let widgets = widgets, widgets.count > 0 
        // User did configure at least one widgets
    

这也是根据documentation:

检索有关用户配置的小部件的信息。

【讨论】:

【参考方案2】:

很遗憾,我认为(目前)不存在这样的 API。

对于 1. 我会写一些东西来标识共享用户默认容器中的小部件。钩子是getSnapshot(for:,in:,completion:)getTimeline(for:,in:,completion:)context.isPreview == false。现在困难的部分是您没有获得任何小部件的 id,因此您无法区分具有相同配置的两个小部件 (afaik)。

对于 2。我认为这是(并且将是)不透明的,因此您只需告诉 WidgetCenter 重新加载特定或所有配置,当当前没有小部件放置在主屏幕上时,什么也不会发生。

【讨论】:

以上是关于如果正在使用我的小部件,如何查询 WidgetKit?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DraggableScrollableSheet 小部件中固定前两个最顶部的小部件?

如何使用服务来监控 Android 中的方向变化

如何将旧的小部件迁移到新的小部件

如何在wordpress中使用自定义小部件

如何清除 kivy 中的小部件?

如何在从另一个小部件继承的小部件中设置数据?