AppWidget(桌面组件)
2016-08-25 11:23
232 查看
区别
与普通widget是两个概念。普通说的widget只是组件,视图。App widget 是一个桌面组件。
注意:
应用必须安装在内存里,才能显示widget
开始
在官方文档里搜索 App widget配置:在清单文件里添加下列配置(广播接受者)
<receiver android:name=".ProcessWidgetProvider" > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/process_widget_info" /> </receiver>
声明ProcessWidgetProvider
其实就是一个AppWidgetProvider 子类onReceive : 只要有广播,就会调用
onEnabled : 第一个widget创建出来的时候调用
onUpdate : 系统更新widget的时候调用。 widget创建的时候调用。
onDelete : widget 删除的时候调用
onDisable : 最后一个widget删除的时候调用。
在res/xml/文件夹下添加 process_widget_info.xml文件
minWidth widget最小宽度minHeight 最小高度
previewImage 设置预览用的图片。在添加widget之前,widget列表看到的样子。
initialLayout:显示样式的布局文件
resizeMode:用来表示缩放的方式。horizontal vertical。如果属性没有配置代表不可缩放
widgetCategory
home_screen 普通widget的类型
keyguard 5.0之后添加的类型。可以显示在锁屏界面上。
updatePeriodMillis: 系统自动更新widget的时间间隔。
单位是毫秒。
4.0 最小更新间隔为 半个小时
0 代表不更新。
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="40dp" android:minHeight="40dp" android:updatePeriodMillis="1" android:previewImage="@drawable/preview" android:initialLayout="@layout/example_appwidget" android:resizeMode="horizontal|vertical" android:widgetCategory="home_screen"> </appwidget-provider>
添加点击事件
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { LogUtils.loge("onUpdate"); for (int id:appWidgetIds) { RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_process); views.setTextViewText(R.id.tv_process_widget,"呵呵,我是一个拓达一键清理widget"); Intent intent = new Intent(context, ProcessWidgetProvider.class); intent.setAction("PROCESS_BTN_CLICK"); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); views.setOnClickPendingIntent(R.id.btn_process_widget, pendingIntent); appWidgetManager.updateAppWidget(id,views); } }
外部更新widget
SimpleDateFormat formater = new SimpleDateFormat("H:m:s"); RemoteViews views = new RemoteViews(getPackageName(), R.layout.widget_process); views.setTextViewText(R.id.tv_process_widget,formater.format(new Date())); Intent intent = new Intent(this, ProcessWidgetProvider.class); intent.setAction("PROCESS_BTN_CLICK"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); views.setOnClickPendingIntent(R.id.btn_process_widget, pendingIntent); //widgetmanager AppWidgetManager manager = AppWidgetManager.getInstance(getApplicationContext()); //这里的ProcessWidgetProvider 就是在清单文件里注册的 AppWidget 的 WidgetProvider ComponentName componentName = new ComponentName(getApplicationContext(), ProcessWidgetProvider.class); manager.updateAppWidget(componentName, views);
主动更新
使用handler使用AarmManager
使用这个,不怕服务被杀死。
用户强制停止,半个小时候,系统调用onUpdate的时候,也会把服务重新启动。
相关文章推荐
- android 桌面组件 App widget的使用
- Android 桌面组件【app widget】 进阶项目--心情记录器
- Android桌面组件App Widget完整案例
- Android之桌面组件App Widget案例
- Android 桌面组件【app widget】 进阶项目--心情记录器
- Android之桌面组件AppWidget
- Android 桌面组件【app widget】 进阶项目②--心情记录器
- Android桌面组件AppWidget讲解
- Android 桌面组件【app widget】 进阶项目--心情记录器
- Android的桌面组件App Widget的使用方法 AppWidgetProvider RemoteViews
- Android 桌面组件【app widget】 进阶项目--心情记录器
- Android 桌面组件【app widget】 进阶项目--心情记录器
- Android 桌面组件【app widget】 进阶项目--心情记录器
- 桌面组件Appwidget的应用实例以及导入第三方jar包的问题解决
- Android 桌面组件【app widget】
- Android--桌面组件AppWidget
- Android桌面组件App Widget开发三步走
- Android 桌面组件【app widget】 进阶项目--心情记录器
- (4.1.27.1)Android之桌面组件App Widget案例之高仿墨迹天气桌面组件
- 理解与应用Android桌面组件AppWidget