安卓之appwidget学习总结
来源:互联网 发布:mac os 10.12 beta6 编辑:程序博客网 时间:2024/06/06 15:40
appwidget就是我们常用的桌面控件,最常见的就是桌面上的时钟控件。
appwidget实质上是一个带界面的广播。我是这么认为的。。
首先先构造一个appwidget:
public class FirstWidget extends AppWidgetProvider {@Overridepublic void onDeleted(Context context, int[] appWidgetIds) {// TODO Auto-generated method stubsuper.onDeleted(context, appWidgetIds);}@Overridepublic void onDisabled(Context context) {// TODO Auto-generated method stubsuper.onDisabled(context);}@Overridepublic void onEnabled(Context context) {// TODO Auto-generated method stubsuper.onEnabled(context);// context.startService(new Intent(context, FSerVice.class));}@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubsuper.onReceive(context, intent); AppWidgetManager appWidgetManger = AppWidgetManager.getInstance(context);int[] appIds = appWidgetManger.getAppWidgetIds(new ComponentName(context, FirstWidget.class));RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.widget);views.setImageViewResource(R.id.imageView,R.drawable.ic_launcheron);}appWidgetManger.updateAppWidget(appIds, views);}@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {// TODO Auto-generated method stubBitmap bmp;if (mContext == null) {mContext = context;}super.onUpdate(context, appWidgetManager, appWidgetIds);RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.widget);Intent intentClick = new Intent(SET_WIFI_ACTION);PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,intentClick, 0);views.setOnClickPendingIntent(R.id.imageView, pendingIntent)appWidgetManager.updateAppWidget(appWidgetIds, views);/** 为AppWidget设置点击事件的响应 */}}
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,intentClick, 0);
这里有三个选择有getBroadcast,getActivity还有getService.
但是我在实际使用中发现了这个问题:即以broadcast形式发送点击事件会在一些清理软件杀进程之后失效,点击就没效果了。
但是通过按钮启动一个activity的话就不会产生这个问题,如果是一些比较短时间的操作,我想用这个,然后把theme设置为透明主题的话和后台效果就一样了,而且一会有失效的结果 ,更何况现在手机root的比例较大,而且清理已经成了用户的习惯。
桌面控件的描述文件放在res文件夹里的xml文件夹:
<?xml version="1.0" encoding="utf-8"?><appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/widget" android:minWidth="72dp" android:minHeight="72dp" android:updatePeriodMillis="0" android:configure="com.example.widgetflashlight.FileActivity"></appwidget-provider>
包括大小,关于大小应为(你想要的格子x74)-2,一个格子是74x74的.
updatePeriodMillis是更新的周期,sdk在1.5以后就不支持这个了,可能是为了省电吧,要自己写一个service来更新,我想这可能也是为什么被杀了进程之后,serivce应该就没了,所以桌面上的小控件就不会继续更新了。
关于这个configure,如果你的桌面控件生效之前需要启动一个activity来初始化的话就需要配置一个configure。
widget的布局文件依旧放在layout文件夹里:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageButton android:id="@+id/imageView" android:layout_width="72dp" android:layout_height="36dp" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:src="@drawable/ic_launcheron" /></RelativeLayout>
这是我写的一个桌面上的开关控件。
前面说到appwidget类似于一个广播 ,所以也要注册在xml里的:
<receiver android:name="FirstWidget" > <intent-filter > <action android:name="android.appwidget.action.APPWIDGET_UPDATE" > </action> <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> <action android:name="com.example.widgetflashlight.action.widget.click" > </action> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget" /> </receiver>过滤器里面的几个action是这个桌面控件需要“听”见的,这里有它的点击事件,wifi开关状态的改变,还有它自己的更新广播 。
这样下来一整个桌面控件就做完了。
- 安卓之appwidget学习总结
- AppWidget 学习总结
- 安卓控件APPwidget 一
- 安卓控件APPwidget 三
- 安卓之activity学习总结
- 安卓之service学习总结
- 安卓之Broadcast学习总结
- 安卓之数据存储学习总结
- android学习笔记之AppWidget
- Android学习笔记之AppWidget
- Android学习笔记之AppWidget
- 安卓开发小知识-AppWidget入门
- 安卓开发小知识-AppWidget探索
- Android学习之AppWidget高级效果
- appWidget学习
- AppWidget学习
- 安卓学习之Notification的一些总结
- 安卓学习之
- XCode4.3.3 + iOS5.1 无证书开发并生成app、ipa文件
- Linux下安装Python
- 2013多校联合训练第四场
- Linux初学者谈体会
- The Hound of the Baskervilles——14、Death on the Moor
- 安卓之appwidget学习总结
- geoserver wmts服务叠加
- 状态DP求哈密顿回路个数 CodeForces 11D——A Simple Task
- 龙芯开发(2)——Makefile分析
- IIS7中 ASP.NET授权功能如何实现对静态文件的控制
- tomcat5源码解析一 PoolTcpEndpoint类
- 任意类型类Any
- 让你的模拟器不再卡:VirtualBox安裝 Android-x86 4.0
- hdu 4642 Fliping game(博弈)