之前的一些配置如mainfest.xml,xml/widget ,res/layout/my_widget的具体配置请参考API文档,有详细的介绍。
一。对widget的配置。
要实现对widget的configurate的设置有以下几点要注意的
1.通过sendBroadcast把当前intent发送出去,action必须是AppWidgetManager.Action_APPWIDGET_UPDATE; 这样你写的WidgetProvider能接受到,因为widgetProvider本身就是reciver,action就是AppWidgetManager.Action_APPWIDGET_UPDATE,这样就能实现call widgetProvider
2.一定要写setResult(RESULT_OK, intent); 不然widget不会放到桌面上去(忘记了我测试了好久都没有出现。很郁闷的)
E/AndroidRuntime( 1785): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 1785): at com.android.launcher.Launcher.completeAddAppWidget(Launcher.java:657)
E/AndroidRuntime( 1785): at com.android.launcher.Launcher.onActivityResult(Launcher.java:352)
E/AndroidRuntime( 1785): at android.app.Activity.dispatchActivityResult(Activity.java:3595)
E/AndroidRuntime( 1785): at android.app.ActivityThread.deliverResults(ActivityThread.java:3001)
因为对应的Laucher中把对应的widget的ID加入到WorkSpace.java中去。
二。对widgetProvidrer的编写
1.对于WidgetProvider的编写
defaultAppWidget的处理主要是获取到当前的RemoteViews 然后对其中的button 等设置监听
监听的设置 一般是用pendingIntent.因为RemoteViews只支持setOnClickPendingIntent(id,pendingIntent);
而pendIntent的获取一般有2种方法一种是PendingIntent.getActivity();就是跳到对应的Activity去处理你的事假。
pendingIntent = PendingIntent.getActivity(context,
0 /* no requestCode */, intent, 0 /* no flags */);
views.setOnClickPendingIntent(R.id.ivCover, pendingIntent);
第二种是通过调用servers来处理
pendingIntent = PendingIntent.getService(context,
0 /* no requestCode */, intent, 0 /* no flags */);
views.setOnClickPendingIntent(R.id.btnNext, pendingIntent);
三。对server的编写
onCreate一般是第一次调用的时候实例化一些东西
一般在onStart()中对你传过来的action进行处理
对应的servers处理完之后,调用WidgetProvider中的更新UI的code就ok了
参考文献:
Music的widget
Search的widget
有兴趣朋友可以直接去查看下源码!