您的位置:首页 > 移动开发

016、AppWidgetProvider桌面小控件

2013-09-27 21:41 381 查看
AppWidgetProvider对象可以实现桌面Widget
AppWidget也有生命周期,当重写AppWidgetProvider的onUpdate()方法后,就会进入第一次AppWidget的更新周期中,然而它在AndroidManifest.xml里是定义在<receiver>TAG中,所以当手机对操作系统广播"android.appwidget.action.APPWIDGET_UPDATE"信息的同时,也会被AppWidgetProvider获取,又由于它并非服务,所以在失去焦点时,虽然依旧在后台运行,但不会进行画面的更新。一般在onUpdate方法里面在启动一个服务,再在服务里面注册希望收听的广播。
每一个AppWidgetProvider都有更新时间设置,这个更新时间间隔一到,就会更新AppWidget的RemoteView对象,此处的时间间隔将影响电池电量的消耗速度,一般建议是一天更新一次。
当用户删除这个AppWidget时,会调用onDeleted()方法。

AndroidManifest.xml文件里面配置:

<receiver
android:name="com.example.ex_4_28_appwidgetprovider.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/my_widget_provider" />
</receiver>


上面文件里面引用的<meta-data>里面的android:resource="@xml/my_widget_provider",有3个属性是比较重要的:"android:minWidth"为AppWidget在手机桌面上的宽,"android:minHeight"为AppWidget在手机桌面上的高,"android:updatePeriodMillis"为AppWidget定时更新Refresh RemoteView的时间

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/activity_main"
android:minHeight="72dp"
android:minWidth="72dp"
android:updatePeriodMillis="6000" />


如果需要在AppWidget里面添加按钮,则onUpdate()方法里面的RemoveView对象需要新增setOnClickPendingIntent()。

for (int appWidgetId : appWidgetIds) {
Intent configIntent = new Intent(context, MyActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
configIntent, 0);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.activity_main);
remoteViews.setOnClickPendingIntent(R.id.bt, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: