码迷,mamicode.com
首页 > 移动开发 > 详细

14、AppWidget及Launcher

时间:2014-09-15 14:12:38      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   color   io   os   java   ar   strong   

一、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 其它

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

 

14、AppWidget及Launcher

标签:android   style   blog   color   io   os   java   ar   strong   

原文地址:http://www.cnblogs.com/androidsj/p/3972621.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!