我做了一个由5个活动组成的应用程序。我只想知道当我在主应用程序的活动中按下当前按钮时,如何才能更新小部件
发布于 2015-02-27 03:04:39
对于在manifest.xml中声明的小部件,您需要一个reciever
:
<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
}
https://stackoverflow.com/questions/28750082
复制相似问题