首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅当我在主应用程序中按下活动中的按钮时才能更新小部件

仅当我在主应用程序中按下活动中的按钮时才能更新小部件
EN

Stack Overflow用户
提问于 2015-02-27 02:31:41
回答 1查看 278关注 0票数 0

我做了一个由5个活动组成的应用程序。我只想知道当我在主应用程序的活动中按下当前按钮时,如何才能更新小部件

EN

回答 1

Stack Overflow用户

发布于 2015-02-27 03:04:39

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

代码语言:javascript
运行
复制
    <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>

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

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

代码语言:javascript
运行
复制
  Intent i = new Intent();
  i.setAction(CUSTOM_INTENT);
  context.sendBroadcast(i);

哪里

代码语言:javascript
运行
复制
public static final String CUSTOM_INTENT = "jason.wei.custom.intent.action.TEST";

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

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

代码语言:javascript
运行
复制
<action android:name="jason.wei.custom.intent.action.TEST" />

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

代码语言:javascript
运行
复制
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方法,您可以在该方法中设置要执行以更新小部件的操作:

代码语言:javascript
运行
复制
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                     int[] appWidgetIds) {
    super.onUpdate(context, appWidgetManager, appWidgetIds);    
//your update code here
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28750082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档