zoukankan      html  css  js  c++  java
  • 管理桌面小控件

    所谓桌面小控件,就是指能直接显示在Android系统桌面的小程序。一般来说,开发者可以把一些用户使用十分频繁的程序,比如时钟、指南针、日历等程序做成桌面控件,这样用户可以直接在桌面上看到程序的运行界面。

    桌面小控件是通过Broadcast的形式来进行控制的,因此每个桌面小控件都对应于一个BroadcastReceiver。为了简化桌面小控件的开发,Android系统提供了一个APPWidgetProvider类,它就是BroadcastReceiver的子类,也就是说开发者开发桌面小控件只要继承APPWidgetProvider类即可。

    为了开发桌面小控件,开发者只要开发一个继承APPWidgetProvider的子类,并重写APPWidgetProvider不同状态的生命周期方法即可。APPWidgetProvider里提供如下四个不同的生命周期方法:

    1、onUpdate:负责更新桌面控件的方法;实现桌面控件通常会考虑重写该方法。

    2、onDeleted:当一个或多个桌面小控件被删除时回调该方法。

    3、onEnabled:当接收到ACTION_APPWIDGET_ENABLED  Broadcast时回调该方法。

    4、onDisabled:当接收到ACTION_APPWIDGET_DISABLED  Broadcast时回调该方法。

    一般来说,开发桌面小控件只需要定义一个APPWidgetProvider的子类。并重写它的onUpdate()方法即可,重写该方法按如下步骤进行:

    1、创建一个RemoteViews对象,创建该对象时可以指定加载指定的界面布局文件。

    2、如果需要改变上一步所加载的界面布局文件的内容,可通过RemoteViews对象进行修改。

    【注】一般来说,RemoteViews所加载的界面中主要包含ImageView和TextView两种组件,RemoteViews提供了修改这两种组件的内容和方法。

    3、创建一个ComponentName对象。

    4、调用APPWidgetProvider更新桌面小控件。

    import android.appwidget.AppWidgetManager;
    import android.appwidget.AppWidgetProvider;
    import android.content.ComponentName;
    import android.content.Context;
    import android.widget.RemoteViews;

    public class DeskTopApp extends AppWidgetProvider{
      @Override
      public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                int[] appWidgetIds) {
        System.out.println(java.util.Arrays.toString(appWidgetIds));
        //加载指定界面布局文件,创建RemoteViews对象
        RemoteViews remoteViews =
              new RemoteViews(context.getPackageName(), R.layout.activity_desk_top_app);
        // //为show ImageView设置图片
        // remoteViews.setImageViewResource(R.id.show, R.drawable.logo);
        //将APPWidgetProvider子类实例包装成ComponentName对象
        ComponentName componentName = new ComponentName(context, DeskTopApp.class);
        //调用APPWidgetManager将RemoteViews添加到ComponentName中
        appWidgetManager.updateAppWidget(componentName, remoteViews);
      }

    }

    由于APPWidgetProvider继承了BroadcastReceiver,因此APPWidgetProvider的本质还是一个BroadcastReceiver,为此需要在AndroidManifest.xml文件中使用<receiver.../>元素来配置它,配置该元素时需要为它指定相应的<intent-filter.../>和<meta-data.../>.

    <receiver android:name=".DeskTopApp"
      android:label="@string/app_name"
      >
      <!-- 将该BroadcastReceiver当成桌面小控件 -->
      <intent-filter >
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
      </intent-filter>
      <!-- 指定桌面小控件的meta-data -->
      <meta-data
        android:name="@android:appwidget.provider"
        android:resource="@xml/appwidget_provider"/>
    </receiver>

    上面配置文件中指定该桌面小控件使用@xml/my_appwidget作为neta-data,因此还需要在应用的resxml目录下添加appwidget_provider.xml文件。该文件的内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <!-- 指定该桌面组件的基本配置信息:
      minWidth:桌面小控件的最小宽度
      minHeight:桌面小控件的最小高度
      updatePeriodMills:更新频率
      initialLayout:初始时显示的布局-->

    <appwidget-provider
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:minWidth="150dp"
      android:minHeight="50dp"
      android:updatePeriodMillis="1000"
      android:initialLayout="@layout/activity_desk_top_app"
      >
    </appwidget-provider>

  • 相关阅读:
    jekins接通gitee的webhook做自动部署 vue、react、java、springBoot
    vue可复用性 & 组合
    vite使用短链接
    Ubuntu12.04(X86_64)上安装Mesa8.0.4
    回调函数
    c#隐式转换
    OpenGL ES2 的OffScreen实现
    Catch exception from other thread
    C# []、List、Array、ArrayList 区别及应用
    redhat update
  • 原文地址:https://www.cnblogs.com/jiww/p/5648929.html
Copyright © 2011-2022 走看看