Android桌面小部件AppWidget开发

在Android我们经常可以看到各种桌面小部件,比如时钟、天气、音乐播放器等等。我们可以使用AppWidgetProvider来实现小部件的开发。

AppWidgetProvider是Android中提供的用于实现桌面小工具的类,其本质是一个广播,即BroadcastReceiver。

开发一个桌面小部件的步骤:

一、自定义小部件界面

在res/layout/下新建一个布局文件,名称和内容自定义,看你想把小工具做成什么样。需要注意的是系统默认的小工具布局中只支持以下这些标签,如果用了列表以外的标签,会导致小工具加载错误:

FrameLayout、LinearLayout、RelativeLayout

TextClock、Button、Chronometer、ImageButton、ImageView、ProgressBar、TextView

比如,我们创建了一个名为widget_layout.xml的布局文件:

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="vertical">

android:id="@+id/doge_imageView"

android:layout_width="110dp"

android:layout_height="110dp"

android:src="@drawable/doge" />

二、定义小部件配置信息

定义小部件的配置信息需要在res目录下新建一个xml目录,然后在res/xml/目录下创建一个配置文件,配置文件名称随意。新建app_widget_provider_info.xml:

android:initialLayout="@layout/widget_layout"

android:minHeight="110dp"

android:minWidth="110dp"

android:previewImage="@drawable/doge"

android:updatePeriodMillis="864000" />

上面的参数意义很明确,initialLayout指小部件的初始化布局,一般与最终布局相同;minHeight和minWidth定义了小部件的最小宽高,与小部件所占网格大小有关;previewImage可以指定在添加小部件时看到的预览图;updatePeriodMillis指定了小部件的自动更新周期,单位为毫秒。

小部件最小宽高选取.png

三、定义小部件类,继承自AppWidgetProvider

import android.app.PendingIntent;

import android.appwidget.AppWidgetManager;

import android.appwidget.AppWidgetProvider;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.widget.RemoteViews;

import android.widget.Toast;

/**

* @author zhengxuze

* @date 2017/1/10 create

*/

public class TestWidgetProvider extends AppWidgetProvider {

public static final String CLICK_ACTION = "com.seewo.appwidgettest.action.CLICK"; // 点击事件的广播ACTION

/**

* 每次窗口小部件被更新都调用一次该方法

*/

@Override

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

super.onUpdate(context, appWidgetManager, appWidgetIds);

RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);

Intent intent = new Intent(CLICK_ACTION);

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, R.id.doge_imageView, intent, PendingIntent.FLAG_UPDATE_CURRENT);

remoteViews.setOnClickPendingIntent(R.id.doge_imageView, pendingIntent);

for (int appWidgetId : appWidgetIds) {

appWidgetManager.updateAppWidget(appWidgetId, remoteViews);

}

}

/**

* 接收窗口小部件点击时发送的广播

*/

@Override

public void onReceive(Context context, Intent intent) {

super.onReceive(context, intent);

if (CLICK_ACTION.equals(intent.getAction())) {

Toast.makeText(context, "hello dog!", Toast.LENGTH_SHORT).show();

}

}

/**

* 每删除一次窗口小部件就调用一次

*/

@Override

public void onDeleted(Context context, int[] appWidgetIds) {

super.onDeleted(context, appWidgetIds);

}

/**

* 当最后一个该窗口小部件删除时调用该方法

*/

@Override

public void onDisabled(Context context) {

super.onDisabled(context);

}

/**

* 当该窗口小部件第一次添加到桌面时调用该方法

*/

@Override

public void onEnabled(Context context) {

super.onEnabled(context);

}

/**

* 当小部件大小改变时

*/

@Override

public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) {

super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions);

}

/**

* 当小部件从备份恢复时调用该方法

*/

@Override

public void onRestored(Context context, int[] oldWidgetIds, int[] newWidgetIds) {

super.onRestored(context, oldWidgetIds, newWidgetIds);

}

}

四、在AndroidManifest.xml中声明小部件

android:name="android.appwidget.provider"

android:resource="@xml/app_widget_provider_info" />

OK,小部件完成了,运行一下看看效果:

android桌面部件开发教程,Android桌面小部件AppWidget开发相关推荐

  1. Jetpack Compose教程-水位控制小部件

    Jetpack Compose教程-水位控制小部件 Apple的应用程序和小部件一直是设计的典范,也给我们的"复制系列:活动应用"和"卡片应用"提供了灵感.当他 ...

  2. ArcGIS Maritime Server 开发教程(六)Maritime Service 开发技巧

    ArcGIS Maritime Server 开发教程(六)Maritime Service 开发技巧 本章导读:GIS 开发人员基于 Maritime Service 开发海图应用时总会遇到与海图数 ...

  3. ArcGIS Maritime Server 开发教程(四)Maritime Service 开发实践

    ArcGIS Maritime Server 开发教程(四)Maritime Service 开发实践 本章导读:Maritime Service 属于 MapService 的一个扩展,大部分功能继 ...

  4. SAP UI5 应用开发教程之八十二 - 采用 OPA5 开发支持页面跳转的 SAP UI5 集成测试用例试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  5. android的webView的教程,Android WebView 应用界面开发教程

    WebView组件本身就是一个浏览器实现,Android5.0增强的WebView基于Chromium M37,直接支持WebRTC.WebAudio.WebGL.开发者可以直接在WebView中使用 ...

  6. Android-自定义桌面小部件【完成小米MIUI小部件】

    最近相信大家都坐着小板凳听了MIUI的内容吧.当然了MIUI小部件可以说让MIUI上档次了许多,作为开发者的你是否为之惊叹?当然了我看到了许多的貌似自定义的简单操作,当然了大多数都是可爱简约的背景加动 ...

  7. android开发教程,android开发入门教程

    所谓知己知彼才能百战百胜,想学好android就必须先了解 android是什么意思 android环境搭建 Android一词的本义指"机器人",同时也是Google于2007年 ...

  8. android项目开发教程,Android项目开发教程

    Android项目开发教程 编辑 锁定 讨论 上传视频 Android项目开发教程 书    名 Android项目开发教程 作    者 车金庆.何征天.李琳.严正宇.周凌翱 类    别 图书&g ...

  9. 安卓底层linux开发教程,Android手机平台移植与底层开发 PDF

    支持Android的热门ARM硬件平台简介 ARMv7架构SOC l TI OMAP系列,2009年OMAP3和OMAP4关注度较高 l Freescale i.MX51系列 l Qualcomm 8 ...

  10. android studio百度地图教程,Android studio百度地图SDK开发 2020最新超详细的Android 百度地图开发讲解(4) 路线规划之起始点地址输入实现规划...

    实现起始点输入的路线规划 要实现输入起始点的路线规划,需要两个输入框,可以将两个输入框设置在和地图同一个Activity中,也可以新建一个Activity,来实现地址的输入,然后通过页面之间的跳转来传 ...

最新文章

  1. python人脸识别plc_三个Python项目实战,打造人脸识别系统!
  2. 看懂SqlServer查询计划
  3. u852日期限制解决补丁_用友U8hotfix和补丁包替换原则及注意事项
  4. linux ftp下载文件_Linux系统中10个使用Wget命令下载文件示例
  5. C语言中main函数的研究,以及对代码断点调试的研究(王爽老师 汇编语言)
  6. 大幅面多相机高精度定位及测量解决方案
  7. 使用环境变量来配置 Teams App 的 manifest
  8. NMEA码详解【转】
  9. 高级语言程序设计C试卷答案,2018高级语言程序设计考卷B及参考答案.docx
  10. spring事务分类简述
  11. 1.6.jquerymobile--列表
  12. php_字符编码浅谈_积累中。。。
  13. kettle配置集群_KETTLE集群搭建
  14. spring的依赖注入的方式(待更新)
  15. 2022年CXO领导力峰会暨IT东方会技术高管年会
  16. Axure9(基础二)
  17. 百新谷PCB在线下单+ERP智能生产管理系统--实施篇
  18. Yolov3没框原因和解决办法
  19. CAPL基础篇-----CAPL中的循环
  20. Coding and Paper Letter(七十六)

热门文章

  1. awesomium This view has carshed!(MarkdownPad2)
  2. 3DMM(人脸3D形变统计模型)
  3. android 代码设置休眠,几行让Android进入休眠的C代码
  4. ALTRUN 工具使用笔记
  5. kindle dxg 作为电脑扩展显示器
  6. htmlCSS面试题
  7. Labview操作sqlite数据库
  8. 【第158期】游戏策划:给@zhang的简历分析
  9. 人工智能 一种现代方法 第6章 约束满足问题
  10. Ubuntu中Scala下载