Launcher是系统启动后第一个启动的程序,是其它应用程序的入口,也就是我们的手机程序的桌面程序;
一、Launcher的定义及构成:
<1>通过查看官方提供的Launcher源码可以知道其实Launcher也是一个Activity,不过它的intent-fliter有点特殊;
Launcher的intent-filter中,action为intent.action.MAIN,表示该Activity是程序的主入口,但是它的category是category.HOME,和一般的app不一样,category.HOME则标识了这个Activity是一个Launcher,其实就是对应的按下HOME键所跳转到的Activity,也就是我们的桌面;
下面我们再来看一下一个普通的App的程序主入口Activity的配置:
category.LAUNCHER表示该Activity在Launcher上可见,所以这一个Activity会被添加到Launcher;
<2>Launcher构成:
HomeScreen(WorkSpace+HotSeats),Shortcut(快捷方式),LiveFolder(文件夹),AppWidget(窗口小部件),WallPaper(壁纸);
AllAppList:
下面我们就来分别研究探讨这四个元素
1、Shortcut
在Launcher的配置文件里面有这样一个广播接收者用于监听添加快捷方式
查看InstallShortcutReceiver的源码

2、LiveFolder
在Launcher.java文件中,找到添加LiveFolder的入口
当我们长按桌面之后,选择添加文件夹,则会执行上面这段代码,在这里会先创建好一个空文件夹;
完成添加
3、AppWidget:AppWidgetProvider用来在HOME页面显示插件
实现步骤:
>>1、在res/xml/文件夹下创建AppWigdetProvider_Provider.xml文件
>>2、修改MainActivity继承自AppWidgetProvider并覆写里面的一些方法,实际上AppWidgetProvider就是一个BroadcastReceiver;
>>3、为Widget创建一个显示用的布局文件:main.xml
>>4、修改程序自动生成的清单文件。在AndroidManifest.xml中,声明上述的AppWidgetProvider的子类是一个Receiver,并且:
(1)、该Receiver的intent-filter的Action必须包含“android.appwidget.action.APPWIDGET_UPDATE”;
(2)、该Receiver的meta-data为“android.appwidget.provider”,并用一个xml文件来描述布局属性。
运行程序:进入WIDGETS页面,可将Widget添加到HOME页
在AppWidgetProvider类中,还有其它相关的方法
AppWidget本质上是一个AppWidgetHostView;

AppWidgetProvider definition
meta-data resource to provider.xml
provider xml to layout.xml
create AppWidgetInfo transact();
Launcher和AppWidget交互流程如下: