热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Android开发入门之Appwidget用法分析

这篇文章主要介绍了Android开发入门之Appwidget用法,较为详细的分析了AppWidget的概念、功能、创建、使用方法与相关注意事项,需要的朋友可以参考下

本文实例讲述了Android Appwidget用法。分享给大家供大家参考,具体如下:

App Widgets 是一个小型应用程序的View  他可以嵌入到其他应用程序中(如 桌面程序) 并且可以得到周期性刷新。

在创建App Widget之前需要了解以下几个概念

AppWidgetProviderInfo对象

它是对App Widget 元数据的一个描述,譬如 AppWidget的布局,刷新频率,以及   AppWidgetProvider 类  这些元数据都是定义在XML中。

AppWidgetProvider 类的实现

对于App Widget定义了(回调接口)一些基本的方法,这些方法都是基于广播事件(broadcast events ),,通过它,当App Widget更新,创建,无效,卸载时,你可以接收广播。

View layout

为App Widget定义初始布局,用XML来布局

另外,你可以为App Widget 实现一个配置的Activity,这是一个可选择的Activity,在用户添加你的App Widget 准备创建时允许他修改或者配 置App Widget 。

下面我们就开始创建一个App Widget

① 在Manifest声明App Widget

首先,在AndroidManifest.xml中声明  AppWidgetProvider


      
       
      
      


元素需要Android:name 属性,AppWidgetProvider作为引用
  元素务必要包含 元素 然后Action中要有android:name 属性,这个属性需要指定能接收 ACTION_APPWIDGET_UPDATE 广播的AppWidgetProvider,也就是ExampleAppWidgetProvider 这个广播必须唯一 必须明确声明,因为AppWidgetManager会自动的发送所有其他应用程序的广播给AppWidgetProvider,所以很重要。

元素指定AppWidgetProviderInfo资源需要以下属性
Android:name -指定了元数据的名字,用android.appwidget.provider代表数据是AppWidgetProviderInfo描述。
Android:resource -引用AppWidgetProviderInfo 资源的位置
总之一句话:在AndroidManifest.xml主要声明概念中AppWidgetProvider 和AppWidgetProviderInfo

②添加AppWidgetProviderInfo元数据

AppWidgetProviderInfo为AppWidgeet定义了一些最基本的数据,譬如布局的最小尺寸,初始化布局资源,怎样更新App Widget,以及在创建app Widget时的可配置Activity(可选)

要定义一个AppWidgetProviderInfo对象可以用XML资源文件定义,保存在res/xml/自己的文件名 ,XML文件中用一个单一的元素 请看下面的例子:




initialLayout:指定App Widget布局资源文件
Configure:在创建App Widget时为他配置属性的activity
updatePeriodMillis: appwidget更新频率

③ 创建App Widget 布局

你必须为你的App Widget定义个初始化布局文件,可以将布局文件放在 res/layout/directory。 你可以设计你的App Widget用下面列出来
的View对象,但是在你设计开始之前,请你熟读App Widget Design Guidelines.

如果你熟悉XML Layouts ,那么创建一个App Widget将会是简单的, 然而,你必须意识到App Widget布局是基于 RemoteViews ,它并不是支持每一种layout和View widget。

一个RemoteView对象只能支持下面几种layout布局类:
FrameLayout  LinearLayout   RelativeLayout

支持下面几种widget 类:
AnalogClock   Button  Chronometer  ImageButton  ImageView  ProgressBar  TextView  ViewFlipper  ListView  GridView
StackView  AdapterViewFlipper

PS:这些类的继承类也是不被支持的。

下面是我本次写的demo中的Appwidget

功能很简单只为初步理解AppWidget ,响应Appwidget上按钮事件

package com.manymorere.appwidget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
public class ExampleAppWidgetProvider extends AppWidgetProvider{
  private static final String ACTION = "com.manymore.appwidget";
  private int id;
  @Override
  public void onDeleted(Context context, int[] appWidgetIds) {
    System.out.println("onDeleted");
    super.onDeleted(context, appWidgetIds);
  }
  @Override
  public void onDisabled(Context context) {
    // TODO Auto-generated method stub
    System.out.println("onDisabled");
    super.onDisabled(context);
  }
  @Override
  public void onEnabled(Context context) {
    // TODO Auto-generated method stub
    System.out.println("onEnabled");
    super.onEnabled(context);
  }
  @Override
  public void onReceive(Context context, Intent intent) {
    System.out.println("onReceive");
    // 自己定义的ACTION
    if(intent.getAction().equals(ACTION))
    {
      RemoteViews remoteView = new RemoteViews(context.getPackageName(),R.layout.appwidget_layout);
      remoteView.setCharSequence(R.id.button, "setText", "22222222222222");
      AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
      ComponentName compOnentName= new ComponentName(context, ExampleAppWidgetProvider.class);
      appWidgetManager.updateAppWidget(componentName , remoteView);
      System.out.println("收到自定义ACTION");
    }else{
      super.onReceive(context, intent);
    }
  }
  @Override
  public void onUpdate(Context context, AppWidgetManager appWidgetManager,
      int[] appWidgetIds) {
    int N = appWidgetIds.length;
    for(int i = 0; i

每次添加Appwidget实例 都会调用onUpdate()方法 然后会注册里面的Button Onclick事件,当你点击该按钮时会发送一个broadcast,这个broadcast是自己定义的,然后onReceive方法会收到该broadcast,然后再做出一些反应,我这里是把修改了TextView上的text。

由于Appwidget和本身的应用,虽然是在一个程序中,但运行时,它们并不是在一个进程中,所以在在调用方法和修改界面上多少会有点限制,没有普通的(Activity上对View的一些操作)那么自由,所以想对Appwidget上的View做一些操作,或者更新Appwidget,一般需要用到RemoteViews,AppWidgetManager 同时可能还会用到ComponentName

个人理解:RemoteViews在创建时主要代表一个Appwidget实例中View的一个集合 ,而ComponentName则代表一个整个Appwidget实例

完整实例代码点击此处本站下载

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android编程之activity操作技巧总结》、《Android资源操作技巧汇总》、《Android文件操作技巧汇总》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android视图View技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文是关于自学Android的笔记,包括查看类的源码的方法,活动注册的必要性以及布局练习的重要性。通过学习本文,读者可以了解到在自学Android过程中的一些关键点和注意事项。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
author-avatar
ebt1775010
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有