仅当我在主应用程序中按下活动中的按钮时,如何更新小部件

Posted

技术标签:

【中文标题】仅当我在主应用程序中按下活动中的按钮时,如何更新小部件【英文标题】:How can i update a widget only when i press a button in an activity from within the main app 【发布时间】:2015-04-29 06:43:46 【问题描述】:

我制作了一个包含 5 个活动的应用程序。我只是想知道只有当我在主应用程序的活动中按下当前按钮时才能更新小部件

【问题讨论】:

【参考方案1】:

您需要一个reciever 用于在 manifest.xml 中声明的小部件:

    <receiver
        android:label="MyIP Widget"
        android:icon="@drawable/ic_launcher"
        android:name="Widget" >
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider"
            android:resource="@xml/example_appwidget_info" />
    </receiver>

该块应该在应用程序块内。

在我的示例中,小部件会在连接状态更改时更新。您可以将其替换为自定义意图。而且,从您的活动中,您需要发送该意图来更新小部件,如下所示:

  Intent i = new Intent();
  i.setAction(CUSTOM_INTENT);
  context.sendBroadcast(i);

在哪里

public static final String CUSTOM_INTENT = "jason.wei.custom.intent.action.TEST";

你可以选择你想要的名字。

并确保在接收器中添加相同的名称:

<action android:name="jason.wei.custom.intent.action.TEST" />

更新: 要接收您的广播,您需要在 Widget 类中使用此方法

public class Widget extends AppWidgetProvider 

...

@Override
public void onReceive(Context context, Intent intent) 
    super.onReceive(context,intent);
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context.getApplicationContext());
    ComponentName thisWidget = new ComponentName(context.getApplicationContext(), Widget.class);
    int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
    if (appWidgetIds != null && appWidgetIds.length > 0) 
        onUpdate(context, appWidgetManager, appWidgetIds);
    

上面的代码可能看起来有点复杂,但它需要更新您的小部件的所有实例(用户可能在不同的主屏幕上或什至在一个屏幕上拥有您的小部件)。

如您所见,它调用 onUpdate 方法,您可以在其中设置要执行的操作以更新小部件:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                     int[] appWidgetIds) 
    super.onUpdate(context, appWidgetManager, appWidgetIds);    
//your update code here

【讨论】:

我怎样才能在小部件类中收到这个广播,你能帮我吗??

以上是关于仅当我在主应用程序中按下活动中的按钮时,如何更新小部件的主要内容,如果未能解决你的问题,请参考以下文章

当我在我的应用程序中按下按钮时,我如何能够打开谷歌地图?

在android中按下后退按钮后如何返回相同的选项卡?

当我在 Vue JS 中按下父组件上的按钮时如何刷新子组件?

当我在 Motionbuilder 中按下录制按钮时,它会显示“没有可录制的内容”。

将数据发送回 Android 中的主 Activity

当用户在swift中按下注销按钮时如何停止更新位置