`
huangheyuan1229
  • 浏览: 2873 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Jollen 的 Android 教學,#25: HelloAppWidgetProvider.ja

阅读更多
Jollen 的 Android 教學,#25: HelloAppWidgetProvider.java 程式碼說明

转载自:http://blog.chinaunix.net/u/14644/showart_1998061.html

HelloAppWidgetProvider.java 程式碼說明



圖1: HelloAppWidgetProvider的設計
圖1是目前我們的HelloAppWidget範例設計,說明如下:

onUpdate(): 收到ACTION_APPWIDGET_UPDATE廣撥時,框架會callback此method
onDelete(): 收到ACTION_APPWIDGET_DELETE廣撥時,框架會callback此method
AppWidgetManager: 管理App Widget的類別
先前,在AndroidManifest.xml裡我們讓HelloAppWidgetProider類別可以接收 ACTION_APPWIDGET_UPDATE廣撥事件;ACTION_APPWIDGET_UPDATE是最主要的App Widget事件,當AppWidgetProvider被要求為App Widget提供”RemoteView”時,就會收到這個事件。

什麼是RemoteViews?

什麼是RemoteView呢?先看一下框架的設計,如圖2。

簡單來說,「RemoteViews」就是表示UI的類別。res/layout/main.xml描述了應用程式的UI,UI裡當然包含許多組件 (Widget),而在先前的教學裡講到了一個觀念「Android應用程式的UI就是一個View tree」,view tree就是「View Hierarchy」。

總結來說,RemotViews是一個用來表示View Hierarchy的類別。透過RemoteViews可以找到UI裡的每一個組件。



圖2: RemoteView的設計(點擊看全圖)
程式說明: HelloAppWidgetProvider.java

onUpdate()的程式實作:




public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        final int N = appWidgetIds.length;
        for (int i=0; i<N; i++) {
            int appWidgetId = appWidgetIds[i];
            updateAppWidget(context, appWidgetManager, appWidgetId);
        }
    }


說明如下:

1. onUpdate()負責更新「已經安裝」在桌面上的App Widget內容,因此我們實作一個updateAppWidget()來進行真正更新的工作

2. onUpdate()的第二個參數為AppWidgetManager,這是一個「管理AppWidgetProvider」的類別,我們必須透過框架 callback本方法時回傳給我們的AppWidgetProvider物件,來更新桌面上的App Widget

3. onUpdate()的第三個參數appWidgetIds陣列,存放需要更新的App Widget ID;框架會將需要更新的App Widget之ID回傳給onUpdate(),程式必須負責「更新每一個需要更新的App Widget。」

更新App Widget的方式是透過AppWidgetManager來完成,程式實作:






static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
        CharSequence text;
        
        text = "www.jollen.org";
        
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
        views.setTextViewText(R.id.appwidget_text, text);
       
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
}

說明如下:

1. 透過UI layout取得自已的「View Hierarchy」(UI),以前面介紹的RemoteViews物件表示

2. 如圖2,呼叫RemoteView的setTextViewText()方法,修改UI裡的「R.id.appwidget_text」組件,變更文字內容

3. 呼叫AppWidgetProvider的updateAppWidget()方法,更新我們所指定的App Widget,將其UI更新為RemoteView的UI

4. updateAppWidget()的第二個參數為RemoteView,即說明1.取得的UI,說明2.修改了此UI裡的”R.id.appwidget_text”組件,最後透過App Widget Manager更新App Widget的UI

--jollen
0
0
分享到:
评论

相关推荐

    《android培训》来源于jollen的bolg

    **标题:“《android培训》来源于jollen的bolg”** 该标题表明这是一篇关于Android培训的文章,内容来源于一个名为jollen的博客。因此,可以推断文章主要围绕Android开发的基础知识和技术进行讲解。 ### 2. ...

    98M003-Android-應用開發入門

    - **Android SDK**:Android软件开发工具包,包含了开发Android应用程序所需的各种工具和API。 - **ADT (Android Development Toolkit)**:Eclipse的一个插件,提供了与Android SDK集成的功能。 - **AVD (Android ...

    moko365_android-framework-design-porting-1_2010-05-1

    根据提供的文件信息,我们可以推断出这是一份关于Android框架设计移植(Porting)的培训材料,由名为“jollen”的讲师提供。虽然提供的部分文件内容看起来像是乱码,并没有实质性的信息,但我们仍然可以从标题、描述...

    android Jollen's blog

    下面,我们将针对"android Jollen's blog"的两个主要学习资料——"android%E5%9F%B9%E8%AE%AD.pdf"(Android教程)和"Android__HAL.pdf"(Android硬件抽象层)进行详细的解析。 首先,"android%E5%9F%B9%E8%AE%AD....

    android的HAL分析,来源于jollen的bolg:

    在深入探讨Android的硬件抽象层(HAL)之前,我们首先需要理解HAL在Android系统架构中的核心作用。HAL作为连接Android框架与底层硬件设备之间的一座桥梁,它的设计目的是为了实现硬件驱动程序的标准化,使得同一套...

    android技术进阶001

    根据提供的信息,我们可以深入探讨与Android技术进阶相关的几个核心知识点。这包括HAL(硬件抽象层)的概念、设计思想以及其在商业应用中的价值。以下是对这些知识点的详细阐述: ### 1. HAL (硬件抽象层) 的概念 ...

    Jollen Mokoid Android HAL层示例

    Jollen Mokoid的Android HAL层示例——LedTest,为我们提供了深入了解这一层次结构和编程实践的宝贵资源。 **一、Android层次结构** 1. **应用层**:这是用户直接接触的部分,包括各种应用程序如浏览器、相机等。 ...

    Howto_Learn_Linux_Device_Driver

    - **工具**:使用Jollen自製的Jollen-Kit!2006 Training Board进行实操训练。 ### 3. 学习资源与教材 - **主要教材**:O'Reilly出版社的《Linux Device Drivers》第三版,被广泛认为是学习Linux设备驱动的权威指南...

    Android HAL实例学习-Jollen的mokoid工程

    - AOSP源码:Android开源项目提供了大量的HAL模块实例,可供参考学习。 - 开源社区:如GitHub等平台上的开源项目,提供丰富的实践案例和讨论。 通过Jollen的mokoid工程,开发者不仅可以学习到HAL的基本结构和工作...

    jollen 重量级的Android培训讲稿

    《jollen 重量级的Android培训讲稿》是一份深入探讨Android系统开发的珍贵资料,涵盖了SDK、DRIVER以及FRAMEWORK等核心领域的课程内容。这份讲稿旨在为开发者提供一个全面且深入理解Android操作系统的平台,帮助他们...

    Android 移植技术

    在《Android 移植技术》这一主题中,作者Jollen Chen深入探讨了Android操作系统在不同硬件平台上的移植方法和技术细节。这篇文章主要关注于Android系统如何适应不同的硬件环境,特别是在非传统移动设备上的应用,如...

    nodejs-fullstack-book:Node.js Fullstack《从零到一的进击》:初学者写给初学者的全端软体教材by Jollen

    本书内容定位为《从零到一》的基础教学,并使用在。这更是一本「初学者写给初学者」的教材: 每个主题都从基本观念(Zero)开始讲述,并介绍到能撰写简单的程式为止(One) 希望在学习的过程中,培养同学「写程式的...

    Android 应用开发与底层技术

    - **Android Linux Kernel**:Android操作系统基于Linux内核,因此Android设备的核心功能依赖于Linux内核提供的服务。课程中提到了对Linux内核的定制和优化工作,以适应不同硬件平台的需求。 通过这些知识点的学习...

    android-framework-Android系统原理与开发

    根据给定的信息,我们可以深入探讨Android系统的原理与开发,特别是关于Android Service的理论与实践。 ### Android Framework概览 在Android系统中,Android Framework层扮演着核心的角色,它位于Linux内核之上,...

    mokoid工程文件

    **mokoid工程文件**是专门为Android平台设计的一个学习与培训项目,主要目的是帮助开发者深入理解Android系统的层次架构以及硬件抽象层(HAL)的编程方式。这个工程内包含了一个名为`LedTest`的示例程序,它展示了...

    android hal

    此项目由台湾的Jollen开发并维护,具有很好的教学价值。 **下载方法** 可以通过SVN命令获取mokoid项目的代码: ``` svn checkout http://mokoid.googlecode.com/svn/trunk/mokoid-read-only ``` **结构分析** - ...

    Android培训资料2

    这份7z压缩包包含了丰富的学习材料,如Jollen和高焕堂两位专家的教程资料,为Android讲师提供了详实的教学参考。 1. **Android基础** Android是谷歌公司推出的一款开源移动操作系统,广泛应用于智能手机和平板电脑...

    Android HAL实例的mokoid 源代码下载

    这个是jollen的mokoid的源代码,本人在Mini6410上的Android 2.1上验证时可以使用的,具体使用可以参考我的博文http://blog.csdn.net/dfysy/archive/2011/01/10/6127865.aspx

Global site tag (gtag.js) - Google Analytics