我为我的应用制作了一个主屏幕小部件。我需要它来与MainActivity中的方法进行通信。
我将如何处理?
开发文档提到“控件”,但没有解释如何实现它们。(https://developer.android.com/guide/topics/appwidgets/overview#control-widgets)。
我需要服务或接口来在小部件和MainActivity之间进行通信吗?
我尝试过的:
我已经尝试使用SharedPreferences将我的Widget计数器值从WidgetProvider OnReceive方法传递给MainActivity。这确实在某种程度上有效,但是这两种方式都需要实时通信,因此不合适。这就是为什么我在考虑服务方面的原因。但是会有更好的选择吗?
如果我使用一项服务,那将是一项特定的服务吗?就像“ RemoteViewsService”或“ IntentService”一样?
这是我的WidgetProvider中的代码示例:
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (ACTION_SIMPLE_APPWIDGET.equals(intent.getAction())) {
if (mCounter < optionsStrings.length - 1) {
mCounter++;
} else {
mCounter = 0;
}
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.app_widget);
stringText = optionsStrings[mCounter];
views.setTextViewText(R.id.appwidget_text, stringText);
取决于计数器值,我需要在MainActivity中触发各种方法。
MainActivity
可能是您尝试与其进行通信时的destoyed。您需要一个可与您的小部件和活动进行通信的服务。据我了解,IntentService可能就是您想要的。
MainAcitity
启动时,您需要附加到服务并要求其提供最近发送的counter
值。然后,您应该可以做您想做的事。