是否可以从主屏幕小部件访问MainActivity中的方法?

问题描述 投票:0回答:1

我为我的应用制作了一个主屏幕小部件。我需要它来与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中触发各种方法。

java android android-widget
1个回答
0
投票

MainActivity可能是您尝试与其进行通信时的destoyed。您需要一个可与您的小部件和活动进行通信的服务。据我了解,IntentService可能就是您想要的。

MainAcitity启动时,您需要附加到服务并要求其提供最近发送的counter值。然后,您应该可以做您想做的事。

© www.soinside.com 2019 - 2024. All rights reserved.