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文件里面配置:
上面文件里面引用的<meta-data>里面的android:resource="@xml/my_widget_provider",有3个属性是比较重要的:"android:minWidth"为AppWidget在手机桌面上的宽,"android:minHeight"为AppWidget在手机桌面上的高,"android:updatePeriodMillis"为AppWidget定时更新Refresh RemoteView的时间
如果需要在AppWidget里面添加按钮,则onUpdate()方法里面的RemoveView对象需要新增setOnClickPendingIntent()。
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); }
相关文章推荐
- Nagios监控Oralce
- [cocos2d-x]lua环境配置
- [cocos2d-x]lua环境配置
- Android通过JDBC直连MySql
- Android MediaPlayer的生命周期
- 2013(秋季)CocoaChina开发者大会实录及PPT:Kim-Mai Cutler《欧美APP市场推广趋势分析》
- Cocos2D-X笔记(2)场景的切换及特效
- Android import_includes export_includes
- 解决git cherry-pick xxx fatal: bad object xxx
- [Android] "Failed to find Java version for 'C:\Windows\system32\java.exe"
- 【转】cocos2d-x中锚点设置及定位方式
- Android开发怎么查看和管理sqlite数据库
- [Asp.Net]状态管理(Session、Application、Cache)
- pageFlowScope、backingBeanScope、viewScope、applicationScope、sessionScope、requestScope
- Android开发之解析JSon数据(二)
- iOS -view横向变成竖向
- [置顶] 【cocos2d-x入门实战】微信飞机大战之十三:游戏场景过渡
- 抽屉显示控件SlidingDrawer入门
- Hacking and Securing iOS Applications
- android图标设计事宜