android-widget<普通篇>

1.AppWidgetProviderInfo对象

   为App Widget 提供元数据(如何HTML标签),包括布局,更新频率等等数据。

   这个对象被定义在xml文件中。

2.AppWidgetProvider

   定义了App Widget的基本生命周期函数。

   它继承了BroadcastReceiver类,

3.创建一个App Widget的步骤

 3.1 定义AppWidgetProviderInfo:

       在res/xml文件夹当中定义一个名为“example_appwidget_info.xml”文件:appwidget-provider(info对象)

       在layout文件夹下,定义一个“example_appwidget.xml”布局文件:被上面对象指定的布局

       在src里,新建一个继承AppWidgetProvider的类:该类注册在清单文件中

       最后在清单文件中注册<receiver/>:指明上面创建的AppWidgetProvider类和appwidget-provider(info对象)

       注意:App Widget和我们的应用程序(main)运行在不同的进程当中(app widget当中的View是运行在Home Screen 进程当中),所以无法像以前一样为button设置监听器。

4.RemoteViews

   它可以远程操作界面,即可以操作不同进程里的界面,如操作app widget的界面。

   构造方法:RemoteViews(String packageName, int layoutId);//常用在AppWidgetProvider的update方法里。

   成员方法:setOnClickPendingIntent(R.id.button,pendingIntent);//为appwidget设置监听器。

5.PendingIntent

   它是一个包装真正Intent的锦囊,它不知道它要干嘛,所以包装一个真正的Intent,由它去解决。

    构造方法:  getActivity(Context, int, Intent, int) ,//都是静态的方法,启动Activity

            getBroadcast(Context, int, Intent, int),//启动一个Broadcast

                     getService(Context, int, Intent, int),//启动一个Service

6.AppWidgetProvider 

 1 /*
 2  * 该类为appwidgetprovider类
 3  * */
 4 public class ExampleAppWidgetProvider extends AppWidgetProvider{
 5 
 6     @Override
 7     public void onDeleted(Context context, int[] appWidgetIds) {
 8         // TODO Auto-generated method stub
 9         super.onDeleted(context, appWidgetIds);
10         System.out.println("onDeleted"+context.getPackageName());
11     }
12 
13     @Override
14     public void onDisabled(Context context) {
15         // TODO Auto-generated method stub
16         super.onDisabled(context);
17         System.out.println("onDisabled"+context.getPackageName());
18 
19     }
20 
21     @Override
22     public void onEnabled(Context context) {
23         // TODO Auto-generated method stub
24         super.onEnabled(context);
25         System.out.println("onEnabled"+context.getPackageName());
26 
27     }
28 
29     @Override
30     public void onReceive(Context context, Intent intent) {
31         //在这里处理传过来的intent意图对象
32         if(intent.getAction().equals(ACTION))
33         {
34             RemoteViews rv=new RemoteViews(context.getPackageName(), R.layout.example_appwidget) ;
35             rv.setImageViewResource(R.id.iv,R.drawable.qq);
36             //更新视图
37             AppWidgetManager  manager=AppWidgetManager.getInstance(context);
38             ComponentName  cn=new ComponentName (context,ExampleAppWidgetProvider.class);
39             manager.updateAppWidget(cn, rv );
40         }
41         
42          
43         else super.onReceive(context, intent);
44         //System.out.println("onReceive"+context.getPackageName());
45 
46     }
47     //设置intent的动作
48     private final static  String  ACTION="MYWIDGET_ACITON";
49     @Override
50     public void onUpdate(Context context, AppWidgetManager appWidgetManager,
51             int[] appWidgetIds) {
52         //监听在此实现
53         //第一步取出appwidget(桌面可能添加多个相同的appwidget)
54 //        for(int id=0;id<appWidgetIds.length;id++)
55 //        {
56 //            //如何设置远程监听操作widget界面
57 //            //1,新建pendingIntent
58 //               Intent intent=new Intent(context,TestWidget2Activity.class);//启动Activity
59 //               PendingIntent pintent=PendingIntent.getActivity(context, 0, intent, 0);
60 //            //2,建remoteViews
61 //               RemoteViews  views=new RemoteViews(context.getPackageName(),R.layout.example_appwidget);
62 //            //3,设置监听器
63 //               views.setOnClickPendingIntent(R.id.bt, pintent);
64 //            //4,最后更新界面
65 //             appWidgetManager.updateAppWidget(appWidgetIds[id], views);
66 //             
67 //        }
68        
69       //更改widget里的imageview和textiew
70         Intent  intent2=new Intent();
71         intent2.setAction(ACTION);
72         //用pendingintent包装,并发起广播
73         PendingIntent  pintent2=PendingIntent.getBroadcast(context, 0, intent2, 0);
74         RemoteViews  remoteviews=new RemoteViews(context.getPackageName(), R.layout.example_appwidget);
75         remoteviews.setOnClickPendingIntent(R.id.bt, pintent2);
76         appWidgetManager.updateAppWidget(appWidgetIds, remoteviews);
77      //super.onUpdate(context, appWidgetManager, appWidgetIds);
78 
79 
80          
81     }
82 
83 }
View Code

 

posted @ 2015-02-20 19:53  beyondbycyx  阅读(149)  评论(0编辑  收藏  举报