Android-AppWidget

Android-AppWidget

一 AppWidget

1,界面小组件:模型

2,特点:

界面显示复杂,必须用到ViewGroup

事件不再单一

用到进程间通讯-不断的通讯和刷新

二 设计AppWidget的思路

1,Binder-service和AppWigetManager

2,序列化的复杂界面传输

3,刷新,使用广播

三 AppWidget主要使用的类和框架

与界面相关的两个类:

AppWidgetHost

AppWidgetHostView

AppWigetManager:用于AppWidget和Launcher之间的通讯

AppWigetService:发送广播消息

AppWidgetProvider:receiver类

AppWIdgetProviderInfo:组件信息类

Meta-Data介绍:

四大组件中与并列的属性

android:name

android:value

android:resource

manifest文件中注册

<receiver android:name=".MyAppWidget">
            <intent-filter >
                //定义的系统action
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
            </intent-filter>
            <meta-data
                android:name="android:appwidget.provider"
        //xml定义的provider
                android:resource="@xml/my_appwidget_provider">
            </meta-data>
        </receiver>

在xml中的定义provider:

1,MinWidth,minHeight:

Widget是按照单元格划分的,每个单元格大小是74dp,每个widget嗨需要减去两边的1dp

所以你的真实的宽和高是:单元格的数量*74-2

另外,我们约定整个workspace:收集有4*4个单元格,平板有8*7个,

并且都有自动补齐机制

2,updatePeiodMillis:

更新频率,一般不推荐30分钟以上的事件更新一次,没有意义,也不推荐小于5分钟的,太耗电

3,initLayout:

初始化布局,就是小组件的布局文件

4,confingure:

设置添加AppWidget时候启动的设置Activity(过度的Activity),因为有些组件,点击后会进入Activity设置

一些属性

5,previewImage:

设置AppWidget添加后的预览图

四 AppWidgetProvider类的使用

package com.chengzhi.androidappwidget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;

/**
appwidget类的实现

*/
public class MyAppWidget extends AppWidgetProvider
{

   //删除一个AppWidget的消息
    @Override
    public void onDeleted(Context context, int[] appWidgetIds)
    {
        // TODO Auto-generated method stub
        super.onDeleted(context, appWidgetIds);

    }

   //最后一个AppWidget被删除的消息
    @Override
    public void onDisabled(Context context)
    {
        // TODO Auto-generated method stub
        super.onDisabled(context);
    }

     //第一addAppWidget接收的消息
    @Override
    public void onEnabled(Context context)
    {
        // TODO Auto-generated method stub
        super.onEnabled(context);
    }

    //默认的消息接收重载
    @Override
    public void onReceive(Context context, Intent intent)
    {
        // TODO Auto-generated method stub
        super.onReceive(context, intent);
    }

    //到了时间间隔的时候接收到的消息,appwidgetreceiver发来的消息
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds)
    {
        // TODO Auto-generated method stub
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        //更新所有的AppWidgetId的集合

        for (int i = 0; i < appWidgetIds.length; i++)
        {
            RemoteViews _remotView = new RemoteViews(context.getPackageName(), R.layout.my_appwidget_lauout);
            //改变组件名称
            _remotView.setTextViewText(R.id.imageButton, "chengzhi Button");
            //事件机制
            _remotView.setOnClickPendingIntent(R.id.imageButton, PendingIntent
                                               .getActivity(context, 0, new Intent(context, MainActivity.class), 0));

            appWidgetManager.updateAppWidget(appWidgetIds[i], _remotView);
        }

    }

}

注意:AppWidget-Updata

用到的类:

RemoteView远程视图的映射控制

RemoteViews _remotView = new RemoteViews(context.getPackageName(), R.layout.my_appwidget_lauout);

appWidgetManager管理类

appWidgetManager.updateAppWidget(appWidgetIds[i], _remotView);

两个重要的过程

update的实现机制:

1,Launcher 启动host listening

2,services send broadcast

3,应用程序接收到onUpdate

4,回传了RemoteView->Service

5,Service 改变Host,updateAppWidget

6,launcher监听到后呈现

init的过程就是添加小组件的过程,如下图UML:

图片UML

五 配置configuration Activity

注册Activity

<activity android:name=".MyAppWidgetConfigActivity">
            <intent-filter >
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
            </intent-filter>
        </activity>  

在xml中加上配置信息

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
    xmlns:android="http://schemas.android.com/apk/res/android"
    上面有属性的介绍
    android:minWidth="146dp"
    android:minHeight="72dp"
    android:updatePeriodMillis="3000"
    android:initialLayout="@layout/my_appwidget_lauout" android:configure="com.chengzhi.androidappwidget.MyAppWidgetActivity"
    >
</appwidget-provider> 

六 我在Widget要去触发我的app里面的事件

向自己的appsendMessage

总结面试题:

1 Widget实际上是什么?

HostView

2 Widget界面大小?

就是单元格的相关概念

3 meta-data?

meta-data就像其名一样,主要用来定义一些组件相关的配置值。

按照官方定义,metadata是一组供父组件使用的名值对(name-value pair),

因此相应的meta-data元素应该定义在相应的组件中。即如果想在activity中使用metadata,

那么meta-data必须定义在AndroidManifest.xml的activity声明中

name必须是android.appwidget.provider

4 appWidgetProvider实际上是什么类

BroadcastReceiver类

5 AppWidget是如何实现的?

manifest文件中注册receiver

定义Appwidget的布局文件和xml中的配置文件

实现继承AppWidget的类的on…等方法

6 如何让软件自动添加Shortcut到HomeScreen

在manifest文件中注册并且加上权限

注册

<activity android:name="com.chengzhi.shortcut.MyShortCutActivity">
            <intent-filter>
                <action android:name="android.intent.action.CREATE_SHORTCUT"/>
            </intent-filter>
        </activity>

权限

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"></uses-permission>

7 补充

Binder在通讯中的作用:

server(stub app1应用程序)远程代理模式

client(app2,Launcher)

client->Binder->server

<- <-

Binder(Driver内核驱动,linux进程机制-内存共享)

版权声明:欢迎交流,QQ872785786

时间: 2024-08-25 13:37:28

Android-AppWidget的相关文章

Android AppWidget开发实战

AppWidget 框架类 1.AppWidgetProvider 继承自 BroadcastRecevier , 在AppWidget 应用 update.enable.disable 和 delete 时接收通知.其中,onUpdate.onReceive 是最常用到的方法,它们接收更新通知. 继承自 AppWidgetProvider 可实现的方法为如下: onDeleted(Context context, int[] appWidgetIds) onDisabled(Context c

android AppWidget的使用以及利用TimerTask实现widget的定时更新

第一步:首先是Widget的定义声明: 在资源文件下的xml文件夹中建立文件example_appwidget_info.xml: <?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@lay

Android AppWidget(转)

AppWidget不知道大家使用这个多不多,这个在手机上也叫做挂件,挂件也就是放在桌面方便用户进行使用的,从android1.6开始挂件支持一些简单的lauout和view,到了android4.0之后谷歌在挂件上也是加上了更为丰富的view支持,下面我们就从头开始来介绍一下这些挂件吧. 如何添加一个简单的AppWidget挂件 添加一个挂件很简单,分为四部,只要按照这四部来弄就很容易添加上一个挂件: (1)添加AppWidgetProviderInfo信息,这个信息是一个以xml文件形式出现的

AppWidget 如android桌面上的时钟

一. 1.App widget 是在home桌面的一个空间,比如时钟,播放器播放时小图标可以点击下一首等那个. 2.AppWidgetProviderInfo 对象: 为App Widget 提供元数据,包括布局,更新频率等数据,这个对象被定义在xml文件当中. 3.AppWidgetProvider : 定义一个App Widget 的基本生命周期函数. 二.创建App Widget步骤: 1.定义AppWidgetProviderInfo : 在res/xml文件夹中定义 example_a

Android之AppWidget

1.Widget设计步骤 需要修改三个XML,一个class: 1)第一个xml是布局XML文件(如:main.xml),是这个widget的.一般来说如果用这个部件显示时间,那就只在这个布局XML中声明一个textview就OK了. 2)第二个xml是widget_provider.xml,主要是用于声明一个appwidget的.其中,Layout就是指定上面那个main.xml. 3)第三个xml是AndroidManifest.xml,注册broadcastReceiver信息. 4)最后

android 中 AppWidget 的 ListView 的实现

3.0 以后系统直接支持了ListView. 关于ListView 的国内资料匮乏,大多数例子都是转来转去.由于初学android, 鄙人在搜索资料的时候遇到了不少麻烦~很是郁闷和苦恼~深感国内学习氛围确实怪异,学习方式需要改变.应该多去查看官方文档.... 话不多说,现在开始listView 实现: 这是文档列出的支持的布局和widget控件: A RemoteViews object (and, consequently, an App Widget) can support the fol

Android:AppWidget之桌面小电筒

安卓开发中很多控件都是Widget类的,但是我们常说的Widget指的是AppWidget,即一些可以放置在桌面的小部件. 下面用两个实例来说一下这个AppWidget怎么来用. 实例一:AppWidget的基本使用 ①创建一个AppWidget的布局文件appwidget_layout.xml <span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?

Android实战简易教程-第六十八枪(android小工具appwidget之时间显示)

Android AppWidget开发不同于普通的android应用,因为AppWidget是运行在别的进程中的程序.其使用RemoteViews更新UI.一旦系统发生变更,很容易引起AppWidget的更新.其支持的组件有限,事件类型也很少.所以一般用于更新周期较长,事件比较简单的用于桌面显示的组件.其开发流程相对来说还是比较简单的.大致分为: 1:编写布局文件 <?xml version="1.0" encoding="utf-8"?> <Te

Android之桌面组件AppWidget

转载:Android之桌面组件App Widget初探 Android开发应用除了程序应用,还有App Widget应用.好多人会开发程序应用而不会开发App Widget应用.本帖子就是帮助大家学习如何开发App Widget应用的. 先简单说说App Widget的原理.App Widget是在桌面上的一块显示信息的东西,通过单击App Widget跳转到程序入口类.而系统自带的程序,典型的App Widget是music,这个Android内置的音乐播放小程序.这个是典型的App Widg

【Android】AppWidget桌面小部件

什么是App Widget? AppWidget是应用程序窗口小部件,是微型的应用程序视图,它可以被嵌入到桌面应用程序中,并接收周期的更新. 如何实现AppWidget? 1. 新建一个AppWidget类继承AppWidgetProvider(AppWidgetProvider继承BroadcastReceiver),并实现相关生命周期方法. onUpdate() 当widget更新时被执行. 注意:用户首次添加widget时,onUpdate()也会被调用.但是如果定义了widget的con