14、AppWidget及Launcher

一、Launcher的简单研究

1 什么是Launcher

Android系统启动后加载的第一个程序 。 这个程序是其他应用程序的入口 。

Launcher构成:

HomeScreen : (Workspace + HotSeats)  , Shortcut,LiveFolder , AppWidget , WallPaper .

AllAppList (用GridView)

2 针对Launcher的开发类型

1)开发自己的Launcher

2)在Wordspace做文章

添加Shortcut ;

添加LiveFolder ;

更改背景 ;

添加AppWidget ;

3 分析Launcher.java的onCreate()

 1 @Override
 2     protected void onCreate(Bundle savedInstanceState) {
 3         super.onCreate(savedInstanceState);
 4      //下面一段是界面初始化工作
 5         LauncherApplication app = ((LauncherApplication)getApplication());
 6         mModel = app.setLauncher(this);
 7         mIconCache = app.getIconCache();
 8         //得到拖动组件实例
 9      mDragController = new DragController(this);
10         //得到Inflater实例
11      mInflater = getLayoutInflater();
12
13      //得到AppWidget管理实例 : AppWidgetManager , AppWidgetHost , AppWidgetHostView三个类的关系
14         mAppWidgetManager = AppWidgetManager.getInstance(this);
15         mAppWidgetHost = new LauncherAppWidgetHost(
16           this, APPWIDGET_HOST_ID);
17         //Host启动监听,监听LauncherProvider中的数据改变
18      mAppWidgetHost.startListening();
19
20         if (PROFILE_STARTUP) {
21             android.os.Debug.startMethodTracing(
22                     Environment.getExternalStorageDirectory() + "/launcher");
23         }
24
25         loadHotseats();
26      //检查本地化语言改变
27         checkForLocaleChange();
28      //设置桌面尺寸
29         setWallpaperDimension();
30
31      //加载内容显示
32         setContentView(R.layout.launcher);
33         //设置动态的每个桌面视图(左右滑动的那个)
34      setupViews();
35      //注册内容观察
36         registerContentObservers();
37      //锁定应用程序
38         lockAllApps();
39
40         mSavedState = savedInstanceState;
41         restoreState(mSavedState);
42
43         if (PROFILE_STARTUP) {
44             android.os.Debug.stopMethodTracing();
45         }
46
47         if (!mRestoring) {
48             mModel.startLoader(this, true);
49         }
50
51         // For handling default keys
52         mDefaultKeySsb = new SpannableStringBuilder();
53         Selection.setSelection(mDefaultKeySsb, 0);
54
55         IntentFilter filter = new IntentFilter(
56           Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
57         registerReceiver(mCloseSystemDialogsReceiver, filter);
58     }

4 HomeScreen可以添加的四大件

Shortcut

LiveFolder

AppWidget

WallPaper

5 分析机制-SequenceDiagram

 

6 Launcher的界面分析

 

7 AppWidget监听机制

二、Shortcut&LiveFolder

1 什么是Shortcut?

 

2 实现Shortcut步骤

1) 建立activity

2) manifest里面 注册并且加上intent-filter,name为

android.intent.action.CREATE_SHORTCUT

3) acitivity ,建立一个Intent 实例 , 设置Extra_***属性,然后返回。

3 添加Shortcut到桌面

 

4 什么是LiveFolder

1) 建立activity

2) manifest里面 注册并且加上intent-filter,name为

android.intent.action.CREATE_LIVEFOLDER

3) acitivity ,建立一个Intent 实例 , 设置Extra_***属性 和 Data属性,

然后返回.

5 实现LiveFolder步骤

三、AppWidget

3.1 什么是AppWidget

AppWidget如果有你设计 , 你觉得他和Shortcut&Livefolder有什么区别

1)界面显示复杂,必须要用到VIewGroup(Layout)。

2)事件不再单一。

3)进程间通讯。不断通讯和刷新。

【设计思路】

Serivce&AppWidgetManager    Binder

序列化的复杂界面传输

为了刷新,Broadcast , BroadcastReceiver

3.2 AppWidget主要框架及类介绍

1> AppWidgetHost    ------ 界面相关

2> AppWidgetHostView    ------ 界面相关

3> AppWidgetManager

4> AppWidgetProvider

5> AppWidgetProviderInfo

5.1 Meta-Data介绍

 

5.2 MinWidth,MinHeight

Widget 是按照单元格划分的 , 每个单元格大小是74dp , 每个widget还需要减去两边个1dp , 即你的真实的宽高算法为:(number of cells * 74) - 2

另外,我们默认约定整个workspace :

平板共有 8*7 个单元格

自动补齐机制

【AppWidget对象剖析】

5.3 updatePeriodMillis

更新频率

一般不推荐30分钟以上时间更新一次的频率(没有意义),但也不推荐小于5分钟的更新频率(耗电)

5.4 initialLayout

5.5 configure

设置添加AppWidget时候启动的设置Activity(过度Activity)

5.6 previewImage

设置AppWidget添加后的预览图

6> RemoteViews

RemoteViews的作用

RemoteViews可以用如下的layout

FrameLayout

LinearLayout

RelativeLayout

以及如下的View元素:

AnalogClock

Button

Chronometer

ImageButton

ImageView

ProgressBar

TextView

ViewFlipper

ListView

GridView

StackView

AdapterViewFlipper

3.3 AppWidget两个过程

【Initialize】

【Update】

1)launcher 启动host listening

2)service send broadcast

3)myapp 接收到 , onUpdate

4,)回传了RemoteViews -> Service

5)Service 改变Host ,updateAppWidget

6)Launcher监听到了,呈现

3.4 实验 【详解AppWidget创建及交互机制】

1> AppWidgetHelloworld

【步骤】

1)建立一个AppWidgetProvider子类;

2)Manifest中注册子类,并且注册AppWidgetProviderInfo配置文件;

3)完成AppWidgetProviderInfo配置文件;

4)完成Layout文件;

5)实现AppWidgetProvider onUpdate 来刷新显示 。

2> 给当前AppWidget加入点击事件支持并且更改view状态。

3> 给当前AppWidget加入ConfigrationActivity支持。

4> 我在Widget要去触发我的App里面的事件?  SendMessage

3.5 其实官方提供了一个很好的案例: Wiktionary & StackView Widget.

 

3.6 总结Widget重点难点理解。

Widget实际上是?   看一下Launcher.

Widget界面大小.

meta-data name必须是android.appwidget.provider.

四、如何来设计我们自己的Launcher

1 了解系统启动过程

2 了解系统如何去识别和启动Launcher的

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.action.HOME"/>

<category android:name="android.intent.action.DEFAULT"/>

</intent-filter>

3 设计框架界面

3.1 HomeScreen

Workspace

>Shortcut

>Livefolder

>Wallpaper -------- Graphic & Animation ,OpenGL ES。

>AppWidget ------- 熟悉AppWidget相关的Framework类。

3.2 Hotseats

AllApplist -------- 通过PackageManager加载我们的app。

4 其它

皮肤  纵横屏幕  多国语言  ......

时间: 2024-10-11 10:45:57

14、AppWidget及Launcher的相关文章

Android-AppWidget

Android-AppWidget 一 AppWidget 1,界面小组件:模型 2,特点: 界面显示复杂,必须用到ViewGroup 事件不再单一 用到进程间通讯-不断的通讯和刷新 二 设计AppWidget的思路 1,Binder-service和AppWigetManager 2,序列化的复杂界面传输 3,刷新,使用广播 三 AppWidget主要使用的类和框架 与界面相关的两个类: AppWidgetHost AppWidgetHostView AppWigetManager:用于App

eclipse指定启动的jdk

原文:http://my.oschina.net/noday/blog/203987 到eclipse目录,打开eclipse.ini文件,在指定位置加入你的jdk相关文件(如下面示例配置中-vm配置,聪明人一看就懂,不懂再问吧) 1 -startup 2 plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar 3 --launcher.library 4 plugins/org.eclipse.equinox.launcher

设置 eclipse 启动时使用的 JDK

1. 在 eclipse.ini 中添加  -vm  参数 -vm C:\Program Files\Java\jdk1.6.0_07\bin\javaw.exe 1 -startup 2 plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar 3 --launcher.library 4 plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v

eclipse - An internal error occurred during: &quot;Running Android Lint&quot;

概述 也不晓得为什么,编译eclipse,设置打开,就自动报错: An internal error occurred during: "Running Android Lint" solution 打开 eclipse根目录下的 'eclipse.ini'文件,将有'-Xms'和'-Xmx'的两行进行修改, 将原内容 1 -startup 2 plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar 3 --launcher.l

【算法】二分查找与暴力查找(白名单过滤)

二分查找与暴力查找. 如果可能,我们的测试用例都会通过模拟实际情况来展示当前算法的必要性.这里该过程被称为白名单过滤.具体来说,可以想象一家信用卡公司,它需要检查客户的交易账号是否有效.为此,它需要: 将客户的账号保存在一个文件中,我们称它为白名单: 从标准输入中得到每笔交易的账号: 使用这个测试用例在标准输出中打印所有与任何客户无关的账号,公司很可能拒绝此类交易. 在一家有上百万客户的大公司中,需要处理数百万甚至更多的交易都是很正常的.为了模拟这种情况,我们提供了文件largeW.txt(10

java异常查看利器之使用 jvmti 的Callback_JVMTI_EVENT_EXCEPTION 事件查看异常

阅读本文前需要了解什么是jvmti,jvmti全称称之为 JVM Tool Interface,有关jvmti更详细的知识,本文不再详细列出.大家可以借助百度来了解有关它更为详尽的内容. 在开源文件大行其道的今天,基于java种种解决方案和框架纷绘踏至而来,浩瀚如海看不完也学不尽.在采用这些解决方案和框架进行项目开发时,往往会出现当程序卡壳时,既无异常提示信息亦没有与之对应的日志输出的局面.每每出现这样的困境时,往往只能通过打断点来一步步调试跟踪来解决.更有甚者,基于某一底层的框架进行相应的开发

AppWidget源码分析---updateAppWidget过程分析

转[原文] 前面一篇文章,分析了AppWidgetProvider和RemoteView的源码,从中我们可以知道它们的实现原理,AppWidgetProvider是一个BroadcastReceiver,所以它是通过广播接收通知的,收到更新通知后,AppWidgetProvider需要去提供View供远程进程显示,而提供的View则是使用RemoteView来代替,通过RemoteView(是一个Parcelable,可跨进程传输数据类型)来作为媒介去传递给远程进程.由远程进程解析RemoteV

AppWidget简单实用案例(四个步骤)

什么是AppWidget?AppWidget就是我们平常在桌面上见到的那种一个个的小窗口,利用这个小窗口可以给用户提供一些方便快捷的操作.本篇打算从以下几个点来介绍AppWidget: 1.如何创建一个简单的AppWidget 2.如何使得AppWidget与客户端程序交互 创建简单的AppWidget 在介绍之前给大家看一下程序运行的最后结果和项目结构图,以便大家有个整体的印象. 运行结果图: 项目结构图: 第一步:            首先在res文件夹下新建一个名字为xml的文件夹,然后

appwidget 实现广播机制

package com.example.appwidget02; import com.example.appwidget02.R.drawable; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.ComponentName; import android.