Android好用的桌面小工具,Android桌面小工具Widget功能实现

记录一下Android桌面小工具的实现方式

1.注册

首先需要在AndroidManifest.xml中进行注册,类似Activity、Service的注册方式:

android:name="android.appwidget.provider"

android:resource="${APP_WIDGET}" />

2.继承AppWidgetProvider实现

public class MonitorWidgetProvider extends AppWidgetProvider{

public MonitorWidgetProvider() {

super();

}

@Override

public void onReceive(Context context, Intent intent) {

super.onReceive(context, intent);

}

@Override

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

super.onUpdate(context, appWidgetManager, appWidgetIds);

}

@Override

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

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

}

@Override

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

super.onDeleted(context, appWidgetIds);

}

@Override

public void onEnabled(Context context) {

super.onEnabled(context);

}

@Override

public void onDisabled(Context context) {

super.onDisabled(context);

}

@Override

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

super.onRestored(context, oldWidgetIds, newWidgetIds);

}

}

从这些可以覆盖的方法名称就可以知道其调用的位置

3.配置文件

注意这里的${APP_WIDGET}是对应的配置文件,我们需要在res/xml中创建:

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

android:initialLayout="@layout/view_monitor_sense"

android:previewImage="@mipmap/ic_launcher_sense"

android:minWidth="320dp"

android:minHeight="110dp"

android:updatePeriodMillis="60000"

android:resizeMode="horizontal|vertical"

android:minResizeWidth="250dp"

android:minResizeHeight="40dp">

解释一下这些参数的意思:

android:initialLayout:对应的布局;

android:previewImage:桌面插件管理界面显示的icon;

android:minWidth:最小宽度,这个宽度计算为:70*n-30,n代表的时在桌面上占用n个格子;

android:minHeight:最小高度,同上;

android:minResizeWidth:最小可调节宽度,结合上方的最小宽度实现后结果即,插件第一次拖拽到桌面时候占用五个格子,长按调节宽度,最小可调节到四个格子宽;

android:minResizeHeight:最小可调节高度,同上;

android:resizeMode:可调节方向,回调方法为onAppWidgetOptionsChanged(...);

android:updatePeriodMillis:给定间隔更新,单位毫秒,回调方法为onUpdate(...);

4.主动更新Widget

我们在注册的时候就添加了action:

类似于发送静态广播,如下操作就可以主动更新Widget:

Intent intent = new Intent(MonitorWidgetProvider.APP_WIDGET_REFRESH);

sendBroadcast(intent);

注意,主动更新Widget中回调的方法为onReceive;

5.RemoteViews获取布局元素

在Widget中需要使用RemoteViews类来操作布局元素,这里和Notication中元素的操作类似:

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

基本的元素操作就不再赘述,记录一下如何跳转到对应App指定界面事件:

Intent intent = new Intent(MyApplication.getInstance(), MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(MyApplication.getInstance(), 0, intent,

PendingIntent.FLAG_UPDATE_CURRENT);

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

以上就是实现一个Widget需要记录的了,ok~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值