iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android开发之AppWidget详解
  • 531
分享到

Android开发之AppWidget详解

2024-04-02 19:04:59 531人浏览 八月长安
摘要

Android通知系统是它的一大特色,而其中,AppWidget是其中一个亮点。在开发应用的中,很多时候可以为其添加一个AppWidget显示在桌面中,及时方便的与用户进行 交互。这

Android通知系统是它的一大特色,而其中,AppWidget是其中一个亮点。在开发应用的中,很多时候可以为其添加一个AppWidget显示在桌面中,及时方便的与用户进行

交互。这里就简单的熟悉一下开发一个AppWidget的流程吧。

想要在应用中创建一个AppWidget,至少需要以下几样东西:

  1. 需要创建一个AppWidgetProviderInfo,来描述AppWidget的元数据。
  2. 需要实现一个自己的AppWidgetProvider对AppWidget进行更新等操作。
  3. 需要布局文件来描述AppWidget的布局。

那么,下面就开始创建一个AppWidget吧。

一、在AndroidManifest.xml中声明一个AppWidget

首先我们需要在AndroidManifest.xml中声明AppWidgetProvider。格式如下:


<receiver android:name="MyAppWidgetProvider" >  
    <intent-filter>  
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />  
    </intent-filter>  
    <meta-data android:name="android.appwidget.provider"  
               android:resource="@xml/my_appwidget_info" />  
</receiver>  

可以看出AppWidgetProvider实际上就是一个BroadcastReceiver,它接收特定的Broadcast。<meta-data>标签描述了AppWidget所使用的元数据,android:resource则声明了定义元数据的xml文件的位置。

二、添加AppWidgetProviderInfo元数据

AppWidgetProviderInfo描述了AppWidget的本质特性,例如,AppWidget更新的周期,最小的宽度、长度,所使用的布局文件是什么,以及添加AppWidget需要启动的

configuration Activity等。我们需要在XML中来定义AppWidgetProviderInfo对象,这个XML文件应该保存在res/xml文件夹下。下面是一个范例:


<appwidget-provider xmlns:android="Http://schemas.android.com/apk/res/android"  
    android:minWidth="294dp"  
    android:minHeight="72dp"  
    android:updatePeriodMillis="86400000"  
    android:previewImage="@drawable/preview"  
    android:initialLayout="@layout/example_appwidget"  
    android:configure="com.example.android.MyAppWidgetConfigure"   
    android:resizeMode="horizontal|vertical">  
</appwidget-provider>  

<appwidget-provider>需要使用这个标签来定义AppWidgetProviderInfo。下面对范例中使用到的属性做下说明。

minWidthminHeight定义了AppWidget需要占据的最小的空间。

updatePeriodMillis定义了大概多久AppWidget需要更新一次,这里定义的只是一个大概的时间,系统不能做出精确的保证。

previewImage定义了在用户选择AppWidget时做现实的图标。

initialLayout定义了AppWidget所使用的布局文件。

configure定义了AppWidget在添加的时候需要启动的configuration Activity 用于执行配置的工作。

resizeMode定义了缩放模式。

三、创建AppWidget所使用的布局文件

在创建AppWidget时必须创建一个布局文件,为其提供布局描述。AppWidget创建视图时,需要根据RemoteViews来创建。而出于效率等因素的考虑,很多控件在

RemoteViews中是被支持的。以下列出能在RemoteViews中使用的UI控件:

layout : FrameLayout , LinearLayout , RelativeLayout

widget : AnalogClock , Button , Chronometer , ImageButton , ImageView , ProgressBar , TextView , ViewFlipper , ListView , GridView , StackView , AdapterViewFlipper

四、创建一个AppWidgetProvider的子类

前面提到过AppWidgetProvider就是一个BroadcastReceiver。对,它其实确实是继承自BroadcastReceiver,只是它为了更加方便的处理AppWidget的广播进行了封装。

AppWidgetProvider在接收到AppWidget的广播的时候,会根据类型分别触发以下几个方法:

onUpdate() : 当AppWidget需要更新时,会触发这个方法,我们需要重写这个方法,在里面实现更新的操作。如果没有定义configuration Activity,那么在添加一个AppWidget

时,也会触发此方法。

onDelete(Context , int[] ):当AppWidget从AppWidgetHost中删除时,会触发此方法。

onEnabled(Context ):如果为一个应用添加了多个AppWidget,只有在第一个AppWidget被添加时,此方法才会被调用。

onDisabled(Context ):当一个应用的最后一个AppWidget从AppWidgetHost中删除时,会触发此方法。

onReceive(Context , Intent ):这实际上就是BroadcastReceiver中的方法,当任何一个Broadcast被接收到时,会调用此方法,并且会在以上回调方法之前被调用。

五、创建一个ConfigurationActivity(可选)

如果需要AppWidget添加的时候做一些配置工作,就可以使用Configuration Activity。要使用ConfigurationActivity首先需要像普通的Activity一样在AndroidManifest.xml中

进行声明:


<activity android:name=".ExampleAppWidgetConfigure">  
    <intent-filter>  
        <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>  
    </intent-filter>  
</activity>  

只是这里需要添加action类型为android.appwidget.action.APPWIDGET_CONFIGURE的intent-filter。然后,需要在AppWidgetProviderInfo中进行声明:


<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"  
    ...  
    android:configure="com.example.android.ExampleAppWidgetConfigure"   
    ... >  
</appwidget-provider>  

最后,当然是需要创建Activity了,在Configuration Activity中,需要执行一些必要的操作:

1、获取AppWidget ID


Intent intent = getIntent();  
Bundle extras = intent.getExtras();  
if (extras != null) {  
    mAppWidgetId = extras.getInt(  
            AppWidgetManager.EXTRA_APPWIDGET_ID,   
            AppWidgetManager.INVALID_APPWIDGET_ID);  
}  

2、进行必要的配置操作,获取AppWidgetManager实例、更新RemoteViews


AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);  
 
RemoteViews views = new RemoteViews(context.getPackageName(),  
R.layout.example_appwidget);  
appWidgetManager.updateAppWidget(mAppWidgetId, views);  

3、设置Activity result,并且返回一个Intent。


Intent resultValue = new Intent();  
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);  
setResult(RESULT_OK, resultValue);  
finish();  

这样一个就创建好了一个Configuration Activity了。

注意android8.0以后无法收到发给自己的AppWidgetProvider,需要添加


intent.setComponent(new ComponentName(context,CacheProvider.class));

Intent intent = new Intent();
intent.setAction(ACTION_CACHE_CLEAN);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
intent.setComponent(new ComponentName(context,CacheProvider.class));
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
                    0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.tv_clean, pendingIntent);

执行完上面的步骤,就已经创建了一个可以在桌面进行显示的AppWidget了。

以上就是Android开发之AppWidget详解的详细内容,更多关于Android AppWidget详解的资料请关注编程网其它相关文章!

--结束END--

本文标题: Android开发之AppWidget详解

本文链接: https://www.lsjlt.com/news/123249.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android开发之AppWidget详解
    Android通知系统是它的一大特色,而其中,AppWidget是其中一个亮点。在开发应用的中,很多时候可以为其添加一个AppWidget显示在桌面中,及时方便的与用户进行 交互。这...
    99+
    2024-04-02
  • AppWidget如何在Android开发中使用
    这期内容当中小编将会给大家带来有关AppWidget如何在Android开发中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。什么是AppWidgetAppWidget 即桌面小部件,也叫桌面控件,就是...
    99+
    2023-05-31
    android appwidget pp
  • Android开发之打包APK详解
    Android开发之打包APK详解 一、APK简介二、无需密匙的 apk三、有密匙的 apk(常规) 生成 apk 其实有两个方法: 方法一:生成无密匙的 apk 文件; 方法二:生成有密匙的 apk 文件。 有密匙和无密匙...
    99+
    2023-08-20
    android android studio ide
  • Android开发之文件操作详解
    本文实例讲述了Android开发之文件操作。分享给大家供大家参考,具体如下:目前,几乎所有的设备都会涉及到文件的操作,例如什么电脑,手机等设备。Android的文件操作和电脑是比较类似的,既可以存储在手机内置的存储器里也可以是sd卡。在这篇...
    99+
    2023-05-30
    android 文件操作
  • Android开发ScaleAnimation详解
    ScaleAnimation是Android中的一种动画效果,用于对View进行缩放操作。通过ScaleAnimation我们可以实...
    99+
    2023-09-08
    Android
  • Android开发之自定义UI组件详解
    Android开发自定义UI组件实现红色小球跟随手指移动 要写实现自定义UI组件,要创建一个BallView类,继承View类,在BallView类中创建画笔,然后重写OnDraw(...
    99+
    2024-04-02
  • Android音频开发之SurfaceView的使用详解
    目录SurfaceView不同点双缓冲机制SurfaceHolder使用SurfaceView SurfaceView从源码上看继承自View,但在内部实现上SurfaceView和...
    99+
    2024-04-02
  • Android开发之MediaPlayer基本使用方法详解
    本文实例讲述了Android MediaPlayer基本使用方法。分享给大家供大家参考,具体如下:使用MediaPlayer播放音频或者视频的最简单例子:Java代码部分:public class MediaPlayerStudy exte...
    99+
    2023-05-31
    android mediaplayer roi
  • Android开发之自定义加载动画详解
    目录一、demo简介二、分析贪吃动画的尺寸比例三、画圆四、实现张嘴闭嘴动画五、小球移动动画一、demo简介 1.效果展示如下图,我截了三个瞬间,但其实这是一个连续的动画,就是这个大圆...
    99+
    2024-04-02
  • C#开发WinForm之DataGridView开发详解
    DataGridView是C# WinForm中常用的控件之一,用于显示和编辑数据。本文将详细介绍DataGridView的开发过程...
    99+
    2023-08-15
    C#
  • Android开发两个activity之间传值示例详解
    目录使用Inten的putExtra传递使用Intention的Bundle传递使用Activity销毁时传递数据SharedPreferences传递数据使用序列化对象Seriaz...
    99+
    2024-04-02
  • Android开发AsmClassVisitorFactory使用详解
    目录前言AsmClassVisitorFactory新的Extension实战ClassVisitor实际代码分析个人观点前言 之前就和大家介绍过AGP(Android Gradle...
    99+
    2024-04-02
  • Android开发之Kotlin委托的原理与使用详解
    目录前言一、接口/类委托二、属性委托三、延迟委托四、观察者委托五、Map委托总结前言 在设计模式中,委托模式(Delegate Pattern)与代理模式都是我们常用的设计模式(Pr...
    99+
    2023-03-23
    Kotlin委托原理 Kotlin委托使用 Android Kotlin委托 Kotlin委托
  • 详解Android 开发中的线程
    今天就跟大家聊聊有关详解Android 开发中的线程,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android 开发中线程的分析代码:package sw.angel.thread...
    99+
    2023-05-31
    android 线程 roi
  • Android移动应用开发指南之六种布局详解
    目录LinearLayoutRelativeLayoutFrameLayoutTableLayoutGridLayoutConstraintLayout参考总结LinearLayou...
    99+
    2024-04-02
  • Android开发Viewbinding委托实例详解
    目录背景从Crash到有意思的源码有趣的代码另外一些有意思的地方结尾背景 前一阵子我们在使用viewbinding的委托的时候碰到了点crash问题,然后发现了一个比较有意思的解决方...
    99+
    2024-04-02
  • Android开发中amera2 Preview使用详解
    目录前言一、Camera2 Preview需要用到哪些模块二、各个模块的功能和之间的关系2.1 SurfaceTexture之SurfaceTextureListener2.1.1 ...
    99+
    2024-04-02
  • Android之ArrayAdapter详解
    ArrayAdapter是Android提供的一个适配器类,用于将数据与ListView进行绑定,实现数据的展示。它是BaseAda...
    99+
    2023-09-28
    Android
  • Java之Spring注解开发案例详解
    在Spring4之后,要使用注解开发,必须要保证aop的包导入了 使用注解需要导入context约束,增加注解的支持! <?xml ver...
    99+
    2024-04-02
  • Android开发之Gradle 进阶Tasks深入了解
    目录前言定义Taskregister与create的区别查找Task配置Task将参数传递给Task构造函数Task添加依赖Task排序Task添加说明跳过Task使用onlyIf使...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作