gpt4 book ai didi

android - 将整数数组从 AppWidget 传递到预先存在的 RemoteViewsService 以由 RemoteViewsFactory 呈现

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:35:51 26 4
gpt4 key购买 nike

我有一个 AppWidget,其中包含一个 StackView。除了 AppWidget,我还有一项服务,当用户将我的 AppWidget 添加到他们的主屏幕时启动,该服务每两小时轮询一次新数据。当服务找到新数据时,我需要它提醒我的 AppWidget,并将该数据传递给 RemoteViewsService(它有我的 RemoteViewsFactory),以便它可以为新数据创建必要的 View 。

目前,当服务找到新数据时,我让它向我的 AppWidget 广播已找到新数据,并将该数据作为 Intent 中的整数数组传递。

我的 AppWidgetProvider 中的 onReceive 方法提取了该数据,然后我完成了设置新 Intent 的过程,该 Intent 被传递到 AppWidget 的 RemoteViews。示例代码如下:

public void onReceive( Context context, Intent intent )
{
int[] appWidgetIds = appWidgetManager.getAppWidgetIds( new ComponentName( context, SampleAppWidgetProvider.class ) );

int[] sampleData = intent.getIntArrayExtra( Intent.EXTRA_TITLE );
for ( int i = 0; i < appWidgetIds.length; i++ )
{
// RemoteViewsFactory service intent
Intent remoteViewsFactoryIntent = new Intent( context, SampleAppWidgetService.class );
remoteViewsFactoryIntent.putExtra( AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i] );
remoteViewsFactoryIntent.setData( Uri.parse( remoteViewsFactoryIntent.toUri( Intent.URI_INTENT_SCHEME ) ) );
remoteViewsFactoryIntent.putExtra( Intent.EXTRA_TITLE, sampleData );

RemoteViews rv = new RemoteViews( context.getPackageName(), R.layout.widget_layout );

// Sync up the remoteviews factory
rv.setRemoteAdapter( appWidgetIds[i], R.id.sample_widget, remoteViewsFactoryIntent );
rv.setEmptyView( R.id.sample_widget, R.id.empty_view );

appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
}

super.onUpdate( context, appWidgetManager, appWidgetIds );
}

这是第一次成功。数据由 RemoteViewsService/RemoteViewsFactory 显示。后续的新数据不会到达 RemoteViewsFactory 的构造函数,因为该工厂的服务已经在运行。

我该如何更新数据?我觉得我应该使用 onDataSetChanged,但我如何访问我从 AppWidget 的 onReceive 传递的 Intent ?

对于如何正确处理此问题的任何见解,我将不胜感激。谢谢。

最佳答案

我使用 BroadcastReceiver 解决了将整数数组传递给 RemoteViewsFactory 的解决方案。我扩展了我的 RemoteViewsFactory 以实现 BroadcastReceiver(特别是 onReceive),并在工厂的构造函数中将其注册到我的应用程序(这也意味着我在 onDestroy 中注销了它)。这样,我就能够使用我在 AppWidgetProvider 的 onReceive 中拥有的整数数组广播 Intent ,并在 RemoteViewsFactory 中接收它。

确保同时调用 AppWidgetManager 的 notifyAppWidgetViewDataChanged,以便 RemoteViewsFactory 知道它之前使用的数据已失效,并提供一个新的整数数组来创建新的 RemoteViews。

关于android - 将整数数组从 AppWidget 传递到预先存在的 RemoteViewsService 以由 RemoteViewsFactory 呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7367257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com