如果日历数据已更改,如何自动更新AppWidget?
如果日历提供商数据已更改,我想自动更新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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论