zoukankan      html  css  js  c++  java
  • 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()

     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到桌面

     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 

  • 相关阅读:
    别人走的路-1
    抽象类跟接口的区别
    一个类实现多个接口的demo
    servlet+jdbc+javabean其实跟ssh差不多
    什么是shell
    设置cookie倒计时让让表单自动提交
    变量、基本数据类型
    编程语言、添加环境变量、变量
    Java优先队列一些问题
    JavaScript学习-JSON
  • 原文地址:https://www.cnblogs.com/androidsj/p/3972621.html
Copyright © 2011-2022 走看看