gpt4 book ai didi

android - 如何在小部件中使用 Eventbus?

转载 作者:行者123 更新时间:2023-11-29 17:14:41 31 4
gpt4 key购买 nike

我正在尝试弄清楚如何在我的 AppWidgetProvider 中使用 Greenbot Eventbus 库。我尝试了以下方法,但没有用:

public class SimpleWidgetProvider extends AppWidgetProvider {
RemoteViews remoteViews;

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int count = appWidgetIds.length;

for (int i = 0; i < count; i++) {
int widgetId = appWidgetIds[i];
remoteViews = new RemoteViews(context.getPackageName(), R.layout.simple_widget);
//set image
remoteViews.setImageViewResource(R.id.piggy_bank, R.drawable.piggy_bank);

Intent intent = new Intent(context, SimpleWidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
//set refresh button
remoteViews.setOnClickPendingIntent(R.id.refresh_btn, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
}

@Override
public void onEnabled(Context context) {
super.onEnabled(context);
EventBus.getDefault().register(this);
}

//set total price
@Subscribe
public void onPriceEvent(TotalPriceEvent event) {
double price = event.totalPrice;
remoteViews.setTextViewText(R.id.total_amount, String.valueOf(price));
}

@Override
public void onDisabled(Context context) {
EventBus.getDefault().unregister(this);
super.onDisabled(context);
}
}

如果我需要附加更多代码,请告诉我。

最佳答案

AppWidgetProvider 只是一个 BroadcastReceiver,它具有专门的 onReceive() 方法,可根据操作将广播委托(delegate)给其他方法。 list 注册的 BroadcastReceiver 实例不会存在很长时间。它们运行的​​时间刚好足以处理广播,然后就死掉了,因此将一个订阅到事件总线不会按预期工作,而且考虑到重叠模式,这有点毫无意义。如果您想通知您的 SimpleWidgetProvider 某事,只需向它发送一个广播即可。

例如,我们为 SimpleWidgetProvider 类定义我们自己的操作,并在 onReceive() 方法中检查它。如果是我们的,我们将根据需要进行处理,否则调用 super 方法以允许 AppWidgetProvider 正确地委托(delegate)它。

public class SimpleWidgetProvider extends AppWidgetProvider {
public static final String MY_SPECIAL_ACTION = "com.mycompany.myapp.SPECIAL_ACTION";

@Override
public void onReceive(Context context, Intent intent) {
if(MY_SPECIAL_ACTION.equals(intent.getAction())) {
// Do your thing
}
else {
// Not our action, so let AppWidgetProvider handle it
super.onReceive(context, intent);
}
}
...
}

我们可以使用通常的机制向它发送广播。

Intent widgetNotify = new Intent(context, SimpleWidgetProvider.class);
widgetNotify.setAction(SimpleWidgetProvider.MY_SPECIAL_ACTION);
widgetNotify.putExtra(...);
...
context.sendBroadcast(widgetNotify);

我还要提到 onEnabled()onDisabled() 中的 super 调用是不必要的,因为这些方法在 AppWidgetProvider.

关于android - 如何在小部件中使用 Eventbus?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39545876/

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