位置: 编程技术 - 正文

AppWidgetProvider使用介绍

编辑:rootadmin
一 介绍

推荐整理分享AppWidgetProvider使用介绍,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

AppWidgetProvider是android中提供的用于实现桌面小工具的类,其本质是一个广播,即BroadcastReceiver。下面是类的继承关系。

AppWidgetProvider使用介绍

所以,在实际的使用中,把AppWidgetProvider当成一个BroadcastReceiver就可以了,这样许多功能就很好理解了。

二 开发一个桌面小工具的步骤1 定义小工具界面:在res/layout/下新建一个xml文件,名为widget.xml,名称和内容可以自定义,看你的小工具要做成什么样子。[html] view plaincopy<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@&#;id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:src="@drawable/clear_cover" /> </RelativeLayout>

2 定义小工具配置信息:在res/xml/下新建appwidget_provider_info.xml,名称随意选,添加如下内容[html] view plaincopy<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android=" android:initialLayout="@layout/widget" android:minHeight="dp" android:minWidth="dp" android:updatePeriodMillis="" > </appwidget-provider> 上面几个参数意义很明确,initialLayout就是指小工具所使用的初始化布局,minHeight和minWidth定义小工具的最小尺寸,updatePeriodMillis定义了小工具的自动更新周期,毫秒为单位,每隔一个周期,小工具的自动更新就会触发。3 定义小工具类,继承AppWidgetProvider:[java] view plaincopypublic class MyAppWidgetProvider extends AppWidgetProvider { public static final String TAG = "MyAppWidgetProvider"; public static final String CLICK_ACTION = "com.example.action.CLICK"; private static RemoteViews mRemoteViews; /** * 每删除一次窗口小部件就调用一次 */ @Override public void onDeleted(Context context, int[] appWidgetIds) { super.onDeleted(context, appWidgetIds); Log.i(TAG, "onDeleted"); } /** * 当最后一个该窗口小部件删除时调用该方法,注意是最后一个 */ @Override public void onDisabled(Context context) { super.onDisabled(context); Log.i(TAG, "onDisabled"); } /** * 当该窗口小部件第一次添加到桌面时调用该方法,可添加多次但只第一次调用 */ @Override public void onEnabled(Context context) { super.onEnabled(context); Log.i(TAG, "onEnabled"); } /** * 接收窗口小部件点击时发送的广播 */ @Override public void onReceive(final Context context, Intent intent) { super.onReceive(context, intent); Log.i(TAG, "onReceive : action = " &#; intent.getAction()); //这里判断是自己的action,做自己的事情,比如小工具被点击了要干啥,这里是做来一个动画效果 if (intent.getAction().equals(CLICK_ACTION)) { Toast.makeText(context, "clicked it", Toast.LENGTH_SHORT).show(); new Thread(new Runnable() { @Override public void run() { Bitmap srcbBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.clear_fan); for (int i = 0; i < ; i&#;&#;) { float degree = (i * )%; mRemoteViews.setImageViewBitmap(R.id.imageView1, rotateBitmap(context, srcbBitmap, degree)); Intent intentClick = new Intent(); intentClick.setAction(CLICK_ACTION); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentClick, 0); mRemoteViews.setOnClickPendingIntent(R.id.imageView1, pendingIntent); AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); appWidgetManager.updateAppWidget( new ComponentName(context, MyAppWidgetProvider.class), mRemoteViews); try { Thread.sleep(); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } } /** * 每次窗口小部件被点击更新都调用一次该方法 */ @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); Log.i(TAG, "onUpdate"); final int counter = appWidgetIds.length; Log.i(TAG, "counter = " &#; counter); for (int i = 0; i < counter; i&#;&#;) { int appWidgetId = appWidgetIds[i]; onWidgetUpdate(context, appWidgetManager, appWidgetId); } } /** * 窗口小部件更新 * * @param context * @param appWidgeManger * @param appWidgetId */ private void onWidgetUpdate(Context context, AppWidgetManager appWidgeManger, int appWidgetId) { Log.i(TAG, "appWidgetId = " &#; appWidgetId); mRemoteViews = new RemoteViews(context.getPackageName(), R.layout.widget); // "窗口小部件"点击事件发送的Intent广播 Intent intentClick = new Intent(); intentClick.setAction(CLICK_ACTION); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentClick, 0); mRemoteViews.setOnClickPendingIntent(R.id.imageView1, pendingIntent); appWidgeManger.updateAppWidget(appWidgetId, mRemoteViews); } private Bitmap rotateBitmap(Context context, Bitmap srcbBitmap, float degree) { Matrix matrix = new Matrix(); matrix.reset(); matrix.setRotate(degree); Bitmap tmpBitmap = Bitmap.createBitmap(srcbBitmap, 0, 0, srcbBitmap.getWidth(), srcbBitmap.getHeight(), matrix, true); return tmpBitmap; } } 4 最后一步,在AndroidManifest.xml中声明小工具类:[html] view plaincopy<receiver android:name=".MyAppWidgetProvider" android:icon="@drawable/df_fan_slow" > <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_provider_info" > </meta-data> <intent-filter> <action android:name="com.example.action.CLICK" /> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> </receiver> 说明:根据我调研的结果,大家都说android.appwidget.action.APPWIDGET_UPDATE是必须要提供的,我试了下,如果不加,就无法出现在手机小工具列表中。其他action可以根据需要自行添加。

其中AppWidgetProvider中的几个回调方法:onEnabled,onDisabled,onDeleted,onUpdated会自动被其onReceive方法在合适的时间调用,确切来说是,当广播到来以后,AppWidgetProvider会自动根据广播的action通过onReceive方法来自动派发广播,也就是调用上述几个方法。android源码里说的很清楚:

[java] view plaincopy// BEGIN_INCLUDE(onReceive) public void onReceive(Context context, Intent intent) { // Protect against rogue update broadcasts (not really a security issue, // just filter bad broacasts out so subclasses are less likely to crash). String action = intent.getAction(); if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) { Bundle extras = intent.getExtras(); if (extras != null) { int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS); if (appWidgetIds != null && appWidgetIds.length > 0) { this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds); } } } else if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) { Bundle extras = intent.getExtras(); if (extras != null && extras.containsKey(AppWidgetManager.EXTRA_APPWIDGET_ID)) { final int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID); this.onDeleted(context, new int[] { appWidgetId }); } } else if (AppWidgetManager.ACTION_APPWIDGET_OPTIONS_CHANGED.equals(action)) { Bundle extras = intent.getExtras(); if (extras != null && extras.containsKey(AppWidgetManager.EXTRA_APPWIDGET_ID) && extras.containsKey(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS)) { int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID); Bundle widgetExtras = extras.getBundle(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS); this.onAppWidgetOptionsChanged(context, AppWidgetManager.getInstance(context), appWidgetId, widgetExtras); } } else if (AppWidgetManager.ACTION_APPWIDGET_ENABLED.equals(action)) { this.onEnabled(context); } else if (AppWidgetManager.ACTION_APPWIDGET_DISABLED.equals(action)) { this.onDisabled(context); } } // END_INCLUDE(onReceive)

android-ListView(1)-listview概览 我们在写android程序时,几乎每个app都用到ListView这种控件并且很大一部分精力都用在处理它上面,我先大致说一下ListView的构成及其功能,这部分也许会

Android 重写Seekbar 我们将会重写SeekBar,改变没有前进的地方和已经前进的地方使用Drawable文件使用LayerDrawable对象,他在xml中的根元素是layer-listprename=codeclass=html?xmlversion=1.

android之handler android中handler的基本使用方法以及运行原理。最近看mars的android重置版第二季的视频关于handler的讲解,让我对于这个以前知道怎么用,却不是很明白原理

标签: AppWidgetProvider使用介绍

本文链接地址:https://www.jiuchutong.com/biancheng/379697.html 转载请保留说明!

上一篇:Android开发秘籍学习笔记(三)(安卓开发代码大全)

下一篇:android-ListView(1)-listview概览

  • 小规模纳税人刚成立公司如何记账
  • 房地产销售土地属于什么收入
  • 取得的高速公路发票可以抵扣吗
  • 公司减免社保到几月份
  • 出资款在现金流中怎么体现
  • 税局用户名
  • 新会计准则开办费分摊
  • 某公司是一家刚成立的大型化妆品生产企业
  • 会计学中营业利润的计算
  • 产品保修发生的维修费计入什么科目
  • 企业的车辆购置税计入哪个科目
  • 个人所得税申报方式选哪个
  • 偷税罪立案标准最新
  • 物业费的进项税额可以抵扣吗
  • 关于增值税的问题有哪些
  • 高危行业企业要设置什么机构
  • 土地平整费计入什么科目
  • 五月份和六月份都有什么节日
  • 投资收益企业所得税预缴
  • 营业外收入怎么开票能开吗
  • 股权无偿赠与子女怎么办理手续
  • 土地增值税通过什么科目核算
  • 农业合作社收到政府补贴做到其他收入里可以吗
  • 一式三联的收据哪一联要盖财务章
  • 公司章程认缴时效是多久
  • 税控盘不交服务费的后果
  • 如何在Windows 11上卸载更新
  • wordpress文章缩略图
  • 主板BIOS无法更改显存
  • php数组可以使用哪些键名
  • Group policy client是什么意思中文翻译介绍
  • coolmark是病毒吗
  • 开机要按f1才能启动
  • 比弗利山庄安全吗治安
  • 甲方如何规避合同责任
  • redis两种持久化方式的优缺点
  • 老师不干了可以从事什么行业
  • day03-CSS
  • 维修费开票属于信息技术服务吗
  • 个人发票抬头是自己的名字吗
  • sql2005安装步骤
  • 开个分公司有啥好处
  • 扣税8%
  • 银行贷款是应付账款吗
  • 在建工程领用原材料税费怎么处理
  • 商场活动经费预算
  • 其他应付款不用还了怎么处理
  • 个人账户打流水需要本人吗
  • 印花税是本月交上个月的吗
  • 以现金支付办公用品费440元
  • 工程异地预缴的税款可以抵机构所在地的税金吗
  • 无票收入怎么报增值税申报表
  • 工业企业应付会计工作内容
  • windows 文件名太长无法删除
  • 微软官方win10启动盘
  • 设置动态壁纸来电铃声
  • mac链接其他屏幕
  • centos7挂载cdrom
  • windows7的使用期限
  • centos7光盘挂载方法
  • win8.1改语言
  • macbook怎么开启
  • win7系统电脑蓝牙怎么开
  • linux常用的帮助命令
  • sed 处理多行
  • android opengl绘图
  • js中断点用法
  • 深入理解新发展理念,推进供给侧结构性改革
  • python获取文件内所有函数
  • logcatapp
  • android 屏幕适配方案
  • express 前后端分离
  • 江苏国家电子税务局新版本怎么申领发票
  • 施工企业建筑机械管理机构主要职责是负责建筑机械的
  • 酒店行业区分小巨头企业
  • 武汉市国税局长
  • 湖南省税务举报
  • 哪些税和费计入应交税费
  • 烟叶税比例
  • 攸县丧葬
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设