14、AppWidget及Launcher RemoteViews
一、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()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//下面一段是界面初始化工作
LauncherApplication app = ((LauncherApplication)getApplication());
mModel = app.setLauncher(this);
mIconCache = app.getIconCache();
//得到拖动组件实例
mDragController = new DragController(this);
//得到Inflater实例
mInflater = getLayoutInflater(); //得到AppWidget管理实例 : AppWidgetManager , AppWidgetHost , AppWidgetHostView三个类的关系
mAppWidgetManager = AppWidgetManager.getInstance(this);
mAppWidgetHost = new LauncherAppWidgetHost(
this, APPWIDGET_HOST_ID);
//Host启动监听,监听LauncherProvider中的数据改变
mAppWidgetHost.startListening(); if (PROFILE_STARTUP) {
android.os.Debug.startMethodTracing(
Environment.getExternalStorageDirectory() + "/launcher");
} loadHotseats();
//检查本地化语言改变
checkForLocaleChange();
//设置桌面尺寸
setWallpaperDimension(); //加载内容显示
setContentView(R.layout.launcher);
//设置动态的每个桌面视图(左右滑动的那个)
setupViews();
//注册内容观察
registerContentObservers();
//锁定应用程序
lockAllApps(); mSavedState = savedInstanceState;
restoreState(mSavedState); if (PROFILE_STARTUP) {
android.os.Debug.stopMethodTracing();
} if (!mRestoring) {
mModel.startLoader(this, true);
} // For handling default keys
mDefaultKeySsb = new SpannableStringBuilder();
Selection.setSelection(mDefaultKeySsb, 0); IntentFilter filter = new IntentFilter(
Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
registerReceiver(mCloseSystemDialogsReceiver, filter);
}
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到桌面
http://blog.csdn.net/zircon_1973/article/details/7773254
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 其它
皮肤 纵横屏幕 多国语言 ......
转载 :http://www.cnblogs.com/skywang12345/p/3264991.html
14、AppWidget及Launcher RemoteViews的更多相关文章
- 14、AppWidget及Launcher
一.Launcher的简单研究 1 什么是Launcher Android系统启动后加载的第一个程序 . 这个程序是其他应用程序的入口 . Launcher构成: HomeScreen : (Work ...
- Android之AppWidget 开发浅析
什么是AppWidget AppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序,先看图: 图中我用黄色箭头指示的即为AppWidget,一些用户使用比较频繁 ...
- android 之 桌面的小控件AppWidget
AppWidget是创建的桌面窗口小控件,在这个小控件上允许我们进行一些操作(这个视自己的需要而定).作为菜鸟,我在这里将介绍一下AppWeight的简单使用. 1.在介绍AppWidget之前,我们 ...
- 完全理解Android中的RemoteViews
一.什么是RemoteViews RemoteViews翻译过来就是远程视图.顾名思义,RemoteViews不是当前进程的View,是属于SystemServer进程.应用程序与RemoteView ...
- The solution for "Eclipse is running in a JRE, but a JDK is required"
Open the eclipse folder and access the eclipse.ini file: Before change it ,you will find it don’t ...
- Android 电源系列小结s
package com.ritterliu.newBatteryWidget; import android.app.Activity; import android.app.Service; imp ...
- 使用 Android Studio 开发 widget 安卓桌面插件
•What AppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序: 这么说可能有点抽象,看图: 像这种,桌面上的天气.时钟.搜索框等等,都属于 APP Wi ...
- 在超算系统上使用sbatch提交MXNet分布式训练任务
在超算系统上运行MXNet分布式训练任务时,面临着一个IP地址相关的问题.我们在提交MXNet的分布式任务时,需要知道各个GPU节点的IP地址,把这些IP地址放到一个hosts文件中,以供分布式训练使 ...
- AppWidget源码分析---updateAppWidget过程分析
转[原文] 前面一篇文章,分析了AppWidgetProvider和RemoteView的源码,从中我们可以知道它们的实现原理,AppWidgetProvider是一个BroadcastReceive ...
随机推荐
- 网络编程socket-SocketServer-FTP
16章 网络编程?应该是讲网络之间如何编程来进行通信的章节 16.1.1 客户端/服务器架构?客户端请求访问,服务器端监听请求,处理请求,进行相应的模式16.1.2 客户端/服务器编程?服务器端:创建 ...
- Fedora 24 Linux 环境下实现 Infinality 字体渲染增强及 Java 字体渲染改善的方法(修订)
Fedora 24 Linux 桌面环境默认字体渲染引擎 freetype 及字体配置工具 fontconfig 采用的是未经优化的编译及设置,字体渲染效果比较差.而某些 Linux 发行版的桌面字体 ...
- poj 2892(二分+树状数组)
Tunnel Warfare Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 7749 Accepted: 3195 D ...
- Windows下Mysql数据库服务的关闭和重启
有时我们在手动修改了Mysql的配置文件之后,我们要重启Mysql服务才能使之生效,这里提供几种重启方法: 1.windows下重新启动mysql5的方法:在安装mysql时系统会添加服务,可以通过管 ...
- AC日记——[中山市选2009]谁能赢呢? bzoj 2463
2463 思路: 博弈: 把先手和后手的走的两个格子看做一个1*2的方格: 如果n为偶数,那么棋盘一定可以被1*2的方格覆盖: 前端为先手,后端为后手: 那么,当还剩下一个1*2的方格时,先手一定可以 ...
- HDU - 2970 Suffix reconstruction
Discription Given a text s[1..n] of length n, we create its suffix array by taking all its suffixes: ...
- IntelliJ IDEA安装MongoDB的的数据操作插件
说明:只能说效果一般,没有Robo 3T那么好用. 参考: https://intellij-support.jetbrains.com/hc/en-us/community/posts/206635 ...
- TortoiseGit在github上创建工程
一.前期准备 TortoiseGit官网下载地址:http://code.google.com/p/tortoisegit/ git下载地址:https://git-scm.com/download/ ...
- mongodb管理副本集(持续更新中)
许多维护工作不能在备份节点上完成 因为要写操作,也不能在主节点上进行,这就需要单机模式启动服务器, 是指重启成员服务器,让他成为一个单机运行的服务器,而不再是副本集中的一员(临时的) 在单机 ...
- es6 - foreach
foreach ... // es5 - foreach arr.forEach(function(value, index, arr) { console.log(value, index, arr ...