需要widget的基本知识
1. AndroidManifest.xml中添加
<receiver android:name="hb30.com.mob.Hb30WidgetProvider" > <intent-filter > <!-- 可以配置其它的Action,但这个是必须的 --> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/></intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/example_appwidget"/> </receiver>
2. 在res目录下添加xml目录,并建立刚才所需文件
3. 建立所需的布局文件。
4. 类文件,继承AppWidgetProvider类
创建PendingIntent的方法
a) getActivity(Context context,int requestCode,Intent intent,int flags) b) getBroadcast(Context context,int requestCode,Intent intent,int flags) c) getService(Context context,int requestCode,Intent intent,int flags)
RemoteViews的作用
a) 表示了一系列的View对象
b) 表示的对象运行在另外的进程当中
向App widget中加入Button
注意:App Widget当中的view运行在HomeScreen进程当中,所以绑定方式
不同:复写方法
接收来自appWidget的广播
1. 在AndroidManifest.xml中为AppWidgetProvider注册新的intent-filter; (它本身配置就是receiver,只要加filter就行)
2. 使用getBroadcast()方法创建一个PendingIntent;
3. 为AppWidget当中的控件注册处理器;
4. 在onReceive方法中接收广播。
a) 定义发送广播
b) 配置menifest中接收该action 的receiver 这两个action一致就可以实现接收。
更新appWidget当中的控件状态
在RemoteViews类中有系列方法来对布局参数进行设置
public void onReceive(Context context, Intent intent) { Log.d("mydebug","widget--- onReceive"); String action=intent.getAction(); if(UPDATE_ACTION.equals(action)){ RemoteViews remoteViews=new RemoteViews(context.getPackageName(),R.layout.widget); remoteViews.setTextViewText(R.id.widgetText, "test"); AppWidgetManager appWidgetManager=AppWidgetManager.getInstance(context); ComponentName componentName=new ComponentName(context, Hb30WidgetProvider.class); appWidgetManager.updateAppWidget(componentName, remoteViews); Log.d("mydebug","I am receiving my news"); }else{ super.onReceive(context, intent); }
<!-- android:configure 如果你想要用户每次添加app widget时候自定义参数如颜色,大小,更新周期或者更多.. 这个时候用 android:configure="com.example.android.ExampleAppWidgetConfigure",它会 让用户自动跳转到该activity,它和一般的activity一样,但是它要能够接收一个包含action="ACTION_APPWIDGET_CONFIGURE" 的intent --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/widget" android:minHeight="72dp" android:minWidth="294dp" android:updatePeriodMillis="86400000" > </appwidget-provider>