如果日历数据已更改,如何自动更新AppWidget?

发布于 2025-02-07 18:27:41 字数 1604 浏览 1 评论 0原文

如果日历提供商数据已更改,我想自动更新AppWidget,但是通过Intent Action_provider_changed onterent Action_provider_changed Works在并非所有的Android版本上都会更改日历更改。

我的方法在下面。

在清单中:

<receiver
    android:name="my.package.name.WidgetProvider"
    android:exported="true"
    android:label="@string/label_period" >
    <intent-filter>
        <action android:name="android.intent.action.PROVIDER_CHANGED" />
        <data android:scheme="content" />
        <data android:host="com.android.calendar" />
    </intent-filter>
    
    <meta-data
        android:name="android.appwidget.provider"
        android:resource="@xml/widget_period_info" />
</receiver>

然后在AppWidgetProvider中:

override fun onReceive(context: Context, intent: Intent) {

if (intent.action.equals(Intent.ACTION_PROVIDER_CHANGED)) {
    val thisAppWidget = ComponentName(
        context.packageName, javaClass.name
    )
    val appWidgetManager = AppWidgetManager
        .getInstance(context)
    val ids = appWidgetManager.getAppWidgetIds(thisAppWidget)
    // Update widgets
    for (appWidgetId in ids) {
            updateWidget(
                context,
                appWidgetManager,
                appWidgetId
            )
    }
}

super.onReceive(context, intent)
}

尤其是,此方法在我的手机上使用Android 10可以使用,但是它与Android 12的电话不使用(AppWidget在Android 12中没有收到意图)。

如何聆听日历数据是否已通过任何其他替代方法改变了AppWidgets的所有版本的其他替代方法?

ps,我已经阅读了有关此任务的服务和Jobscheduler中的ContentObserver,但不知道Appwidgets更好以及如何实现。

I want to update appwidget automatically if calendar provider data has changed, but listening to calendar changes through intent ACTION_PROVIDER_CHANGED works on not all the Android versions.

My method is below.

In Manifest:

<receiver
    android:name="my.package.name.WidgetProvider"
    android:exported="true"
    android:label="@string/label_period" >
    <intent-filter>
        <action android:name="android.intent.action.PROVIDER_CHANGED" />
        <data android:scheme="content" />
        <data android:host="com.android.calendar" />
    </intent-filter>
    
    <meta-data
        android:name="android.appwidget.provider"
        android:resource="@xml/widget_period_info" />
</receiver>

Then in AppWidgetProvider:

override fun onReceive(context: Context, intent: Intent) {

if (intent.action.equals(Intent.ACTION_PROVIDER_CHANGED)) {
    val thisAppWidget = ComponentName(
        context.packageName, javaClass.name
    )
    val appWidgetManager = AppWidgetManager
        .getInstance(context)
    val ids = appWidgetManager.getAppWidgetIds(thisAppWidget)
    // Update widgets
    for (appWidgetId in ids) {
            updateWidget(
                context,
                appWidgetManager,
                appWidgetId
            )
    }
}

super.onReceive(context, intent)
}

Particularly, this method works on my phone with Android 10, but it doesn't on the phone with Android 12 (appwidget doesn't receive intent in case of Android 12).

How to listen to if calendar data has changed by any other alternative method working for all the versions of Android in case of appwidgets?

Would be very grateful for sharing correct, working method.

P.S. I've read about ContentObserver in the Service and JobScheduler for this task, but don't know what's better and how can be implemented for appwidgets.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文