android7添加小工具,为Android应用添加桌面小工具(App Widget)

本文介绍为Android应用添加桌面小工具的方法。桌面小工具可让用户在桌面操作应用功能,越来越多应用具备此功能。添加小工具大概流程为新建布局文件、XML文件,定义继承AppWidgetProvider类的类并实现相关方法,文中给出详细步骤及代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里根据官方参考文档简单介绍为Android应用添加桌面小工具的方法,详情请查阅官方参考文档。(“Widget”中文的意思是“小工具”、“小部件”、“窗口小部件”的意思。)

桌面小工具可以让用户直接在桌面上操作应用的部件功能,例如音乐播放器的小工具可以让用户方便地播放或者暂停音乐,又例如最常见的天气时间桌面小工具。越来越多的应用添加了桌面小工具的功能。

为应用添加桌面小工具的大概流程1\. 新建一个布局文件,即桌面小工具的视图;

2\. 新建一个XML文件,该文件包含有桌面小工具相关信息,例如小工具的布局、更新频率等 ;

3\. 定义一个类,这个类要继承AppWidgetProvider类,并且实现相关方法。

为应用添加桌面小工具的详细流程

第一步:新建一个布局文件,即在res/layout/下新建一个layout布局文件,例如desktop_widget.xml,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13< ?xml version="1.0" encoding="utf-8"?>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="ON"

android:textSize="20sp">

第二步:在res/xml/下新建一个XML文件,例如新建一个名为desktop_widget_info.xml文件,这个XML文件包含了桌面小工具的一些重要元数据,内容如下:

1

2

3

4

5

6

7

8

9

10< ?xml version="1.0" encoding="utf-8"?>

android:minWidth="40dp"

android:minHeight="40dp"

android:updatePeriodMillis="48000000"

android:previewImage="@drawable/pre_widget"

android:initialLayout="@layout/desktop_widget"

android:resizeMode="horizontal|vertical"

android:widgetCategory="home_screen|keyguard">

参数说明:

minWidth、minHeight:分别指定小工具的默认宽度和高度,关于小工具大小的规格说明:

单元

尺寸

1

40dp

2

110dp

3

180dp

4

250dp

n

70*n - 30

具体请参考:http://developer.android.com/guide/practices/ui_guidelines/widget_design.html#anatomy_determining_size

updatePeriodMillis:小工具更新的频率,单位是毫秒。

previewImage:小工具预览图。

initialLayout:小工具的布局文件。

resizeMode:可以设置小工具的可调整方向,如水平或者垂直。

widgetCategory:小工具可显示的位置,如桌面或者锁屏界面。

第三步:新建一个继承了AppWidgetProvider的类,并且实现相关方法。例如我新建了一个名为DesktopWidget.class的类。其实桌面小工具是基于Broadcast的形式实现的,每一个桌面小工具都对应于一个BroadcastReceiver类。而AppWidgetProvider类是BroadcastReceiver的子类,桌面小工具只需要继承AppWidgetProvider类并实现相关方法即可。

在AndroidManifest.xml中添加如下内容:

1

2

3

4

5

6

7

8

android:name="android.appwidget.provider"

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

请注意meta-data标签下的android:resource指定的是第二步中新建的XML文件。

下面开始实现这个DesktopWidget.class类,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71/*

* 桌面小工具

* @author Garth http://garth.im

*/

public class DesktopWidget extends AppWidgetProvider{

private static RemoteViews remoteViews;

/**

* 调用时机: 1.到达指定的更新时间 2.用户向桌面添加appwidget时候

* 系统会发出一个android.appwidget.action.APPWIDGET_UPDATE广播

* 根据AndroidManifest.xml注册信息,启动widgetProvider,然后AppWidgetProvider接收

* 到广播后,调用onUpdate方法初始化

*/

@Override

public void onUpdate(Context context, AppWidgetManager appWidgetManager,

int[] appWidgetIds){

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

Intent intent = new Intent(context, MainActivity.class);

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

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

if(MainService.state){

remoteViews.setTextViewText(R.id.tvWidget, "ON");

}else{

remoteViews.setTextViewText(R.id.tvWidget, "OFF");

}

appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);

}

/**

* 当App Widget被删除时被调用。

*/

@Override

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

super.onDeleted(context, appWidgetIds);

}

/**

* 同一个App Widget实例第一次创建时被调用。

* 比如,如果用户添加两个App Widget实例,只在第一次被调用。

* 如果你需要打开一个新的数据库或者执行其他对于所有的App Widget实例只需要发生一次的设置,

* 那么就在这个方法里定义吧

*/

@Override

public void onEnabled(Context context){

super.onEnabled(context);

}

/**

* 当你的App Widget的最后一个实例被删除时被调用。

* 如果有数据库连接等操作,可以在这里关闭掉吧。

*/

@Override

public void onDisabled(Context context){

super.onDisabled(context);

}

/**

* 接收到每个广播时都会被调用,而且在上面的回调函数之前。

* 通常不需要实现这个方法,因为默认的AppWidgetProvider已经过滤所有App Widget广播并恰当的调用上述方法。

*/

@Override

public void onReceive(Context context, Intent intent){

super.onReceive(context, intent);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值