android学习记录(十八)---AppWidget显示内容随数据改变而更新

我们知道,appWidget可通过设置widgetinfo中的updateTimeMillies设置更新的间隔,那么,当我们需要实时进行更新的时候呢?该如何进行appWidget显示内容的更新?如行程应用中添加了新的行程,想立刻在appWidget显示内容更新。

如何?

我们知道,widgetProvider本质上就是一个广播接收器,所以我们可以在数据修改处发送一个与之符合的广播。

当我们的intent并没附带任何额外数据,只定义了action的时候,会调用WidgetProvider中的onReceive方法。

那么我们就简单的实现以下数据实时更新:

发送广播:

public void addData(Context context){
    add....();
    updateWidget(context)
}
//发送广播,使appWidget更新
private void updateWidget(Context context) {
    Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
    context.sendBroadcast(intent);
}

YourAppWidgetProvider代码:

@Override
public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
        final AppWidgetManager mgr = AppWidgetManager.getInstance(context);
        final ComponentName cn = new ComponentName(context, EventWidgetProvider4x2.class);
        mgr.notifyAppWidgetViewDataChanged(mgr.getAppWidgetIds(cn), R.id.widget4x2LV);
}

我又好奇什么时候会调用AppWidgetProvider的onUpdate呢?

查看AppWidgetProvider部分源码:

  public void onReceive(Context context, Intent intent) {
               String action = intent.getAction();
        if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {
            Bundle extras = intent.getExtras();
            if (extras != null) {
                int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);
                if (appWidgetIds != null && appWidgetIds.length > 0) {
                    this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds);
                }
            }
        }
…

即只有在intent中含有extras且key为AppWidgetManager.EXTRA_APPWIDGET_IDS的值不为空时调用。

当我们的广播不含有这个extras的时候,onReceive会调用,onUpdate不会。



随时欢迎各路好汉能发表见解,想法值得分享~

时间: 2024-11-03 05:34:54

android学习记录(十八)---AppWidget显示内容随数据改变而更新的相关文章

Android学习(十八)Toast的使用

一.什么是Toast 1.Toast是一种提供给用户简洁提示信息的视图. 2.该视图以浮于应用程序之上的形式呈现给用户, Toast提示界面不获取焦点,在不影响用户使用的情况下,给用户某些提示. 3.Android提供的Toast类可以创建和显示Toast信息. 下面演示4种Toast的用法,普通的 Toast,更改位置的Toast,显示图片的Toast,自定义的Toast分别使用4个按钮来实现. main.xml <LinearLayout xmlns:android="http://s

Android学习笔记(八)——显示运行进度对话框

显示运行进度对话框 我们经常有这种经历:运行某一应用程序时.须要等待一会,这时会显示一个进度(Please Wait)对话框,让用户知道操作正在进行. 我们继续在上一篇中的程序中加入代码~ 1.在上一篇的activity_main.xml文件里加入一个Button,加入后的代码例如以下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http:/

android 学习随笔十八(广播与服务 )

1.广播接收者注册 清单文件注册(Android四大组件都要在清单文件中注册) 一旦应用部署,广播接收者就生效了,直到用户手动停止应用或者应用被删除 广播接收者可以使用代码注册 需要广播接收者运行时,使用代码注册,不需要时,可以使用代码解除注册 特殊广播接收者,必须代码注册.电量改变.屏幕开关,必须使用代码注册 2.注册广播接收者 //创建广播接收者对象 receiver = new ScreenOnOffReceiver(); //通过IntentFilter对象指定广播接收者接收什么类型的广

Android学习记录一——安装环境

一直想接触这块,但是却一直耽搁到现在.找过几回资料,找过几回安装包,这两天受了些刺(gong)激(zi),决定静下心来,一点点开始吃. 接触c#都是从门外汉开始,谈不上任何编程基础,所以接触android也很慢. 1.首先需要找到开发工具.就像c#winform用VisualStudio,android的基础语言是java,开发工具自然首选eclipse.这个环节走了一些弯路,最后找到了android官网上的ADT(Android Development Tools). 官网介绍: It's a

Android学习路线(八)为Action bar添加action按钮

Action bar允许你为与当前应用上下文相关的最重要的action items添加action按钮.那些直接显示在action bar上的icon或者文字都被称作action buttons.那些不适合action bar或者不是那么重要的Actions将会被隐藏在action overflow(译者注:action bar最右侧的垂直的三个点)里. 图1. 一个包含Search功能的action button和用来展示附加action的action overflow. 在XML文件中指定A

C++语言学习(十八)——异常处理

C++语言学习(十八)--异常处理 一.C语言异常处理 异常是指程序在运行过程中产生可预料的执行分支.如除0操作,数组访问越界.要打开的文件不存在.Bug是指程序中的错误,是不被预期的运行方式.如野指针.堆空间使用结束未释放.C语言中处理异常的方式一般是使用if....else...分支语句. double divide(double a, double b) { const double delta = 0.000000000000001; double ret = 0; if( !((-de

Android学习记录&mdash;&mdash;让应用通晓地理

一个可以把现在的心情记录到地图上的 APP ,基于高德 LBS 开放平台. 需要用到的工具 Android Studio Android 集成开发环境 Genymotion Android 模拟器 高德 LBS 开放平台 提供定位.地图及其数据存储 Android Asynchronous Http Client Android 异步 HTTP 请求库 Android Studio 和 Genymotion 的基本使用方法可参考<Android学习记录--开发环境搭建>. 创建应用--Mood

Android学习笔记(七)——显示对话框窗口

显示对话框窗口 1.创建Dialog1项目,在activity_main.xml文件中添加一个Button: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:l

十一、Android学习第十天——项目开始(转)

(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 十一.Android学习第十天——项目开始 Android知识点的学习告一段落 从今天开始就要在一个项目中(MP3播放器)来更加熟悉之前学习到的各个知识点~ 一个简单的MP3播放器,应该包括以下几个模块: (一)用户界面模块 (二)文件下载模块——下载MP3和LRC文件. (三)XML解析模块——负责解析从服务器端下载的歌曲列表XML. (四)IO模块——负责LRC文件的