Android Widget开发代码示例详细说明

因为AppWidgetProvider扩展自BroadcastReceiver, 所以你不能保证回调函数完成调用后,AppWidgetProvider还在继续运行。

a. AppWidgetProvider 的实现

/*** Copyright(C):教育电子有限公司 * Project Name: NineSync* Filename: SynWidgetProvider.java * Author(S): Rjdeng* Created Date: 2013-4-23 下午8:55:42 * Version: V1.00* Description: 九科同步挂件*/package com.eebbk.synstudy.widget;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;import com.eebbk.synstudy.R;public class SynWidgetProvider extends AppWidgetProvider
{public static final String SUBJECT_MARK = "subject";private static final int CHINESE_CONSTANT = -1;private final String NINESYNC_PKG = "com.eebbk.synstudy";private final String NINESYNC_CLS = "com.eebbk.synstudy.welcome.WelcomActivity";private final String STUDYCARS_PKG = "com.eebbk.readingcard.readingcard";private final String STUDYCARS_CLS = "com.eebbk.readingcard.readingcard.MenuManagerActivity";private final int widgetViewId[] = { R.id.syn_widget_notes, R.id.syn_widget_chinese, R.id.syn_widget_math,R.id.syn_widget_english, R.id.syn_widget_physics, R.id.syn_widget_chemistry, R.id.syn_widget_organisms,R.id.syn_widget_history, R.id.syn_widget_geography, R.id.syn_widget_political };@Overridepublic void onUpdate( Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds ){// TODO Auto-generated method stubSystem.out.printf( "###九科同步挂件创建\n" );final RemoteViews views = new RemoteViews( context.getPackageName( ), R.layout.main_syn_widget );setViewOnClick( context, views );pushUpdate( context, appWidgetIds, views );super.onUpdate( context, appWidgetManager, appWidgetIds );}@Overridepublic void onDeleted( Context context, int[] appWidgetIds ){// TODO Auto-generated method stubSystem.out.printf( "###九科同步挂件删除\n" );super.onDeleted( context, appWidgetIds );}@Overridepublic void onEnabled( Context context ){// TODO Auto-generated method stubSystem.out.printf( "###当该Widget第一次添加到桌面是调用该方法,可添加多次但只第一次调用\n" );super.onEnabled( context );}private void setViewOnClick( Context context, RemoteViews views ){Intent intent;PendingIntent pendingIntent;ComponentName componentName;//九科同步componentName = new ComponentName( NINESYNC_PKG, NINESYNC_CLS );for ( int i = 1; i < widgetViewId.length; i++ ){intent = new Intent( );intent.setComponent( componentName );intent.putExtra( SUBJECT_MARK, CHINESE_CONSTANT + i );//for putExtraintent.setAction( String.valueOf( System.currentTimeMillis( ) ) );pendingIntent = PendingIntent.getActivity( context, 0 /* no requestCode */, intent, 0 /* no flags */);views.setOnClickPendingIntent( widgetViewId[i], pendingIntent );}//读书卡片intent = new Intent( );componentName = new ComponentName( STUDYCARS_PKG, STUDYCARS_CLS );intent.setComponent( componentName );pendingIntent = PendingIntent.getActivity( context, 0 /* no requestCode */, intent, 0 /* no flags */);views.setOnClickPendingIntent( widgetViewId[0], pendingIntent );}private void pushUpdate( Context context, int[] appWidgetIds, RemoteViews views ){// Update specific list of appWidgetIds if given, otherwise default to allfinal AppWidgetManager gm = AppWidgetManager.getInstance( context );if( appWidgetIds != null ){gm.updateAppWidget( appWidgetIds, views );}else{gm.updateAppWidget( new ComponentName( context, this.getClass( ) ), views );}}}

b. widget外观布局定义文件(文件位置:res\layout)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/syn_widget_bg"android:orientation="horizontal" ><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginLeft="20dip" ><Buttonandroid:id="@+id/syn_widget_notes"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:background="@drawable/readnotes_selector" /></RelativeLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginLeft="50dip"android:layout_marginTop="100dip"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dip"android:layout_weight="1"android:orientation="horizontal" ><ImageButtonandroid:id="@+id/syn_widget_chinese"android:layout_width="0dip"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/chinese_selector"android:clickable="true" /><ImageButtonandroid:id="@+id/syn_widget_math"android:layout_width="0dip"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/math_selector" /><ImageButtonandroid:id="@+id/syn_widget_english"android:layout_width="0dip"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/english_selector" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dip"android:layout_weight="1"android:orientation="horizontal" ><ImageButtonandroid:id="@+id/syn_widget_physics"android:layout_width="0dip"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/physics_selector" /><ImageButtonandroid:id="@+id/syn_widget_chemistry"android:layout_width="0dip"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/chemistry_selector" /><ImageButtonandroid:id="@+id/syn_widget_organisms"android:layout_width="0dip"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/organisms_selector" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dip"android:layout_weight="1"android:orientation="horizontal" ><ImageButtonandroid:id="@+id/syn_widget_history"android:layout_width="0dip"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/history_selector" /><ImageButtonandroid:id="@+id/syn_widget_geography"android:layout_width="0dip"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/geography_selector" /><ImageButtonandroid:id="@+id/syn_widget_political"android:layout_width="0dip"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/political_selector" /></LinearLayout></LinearLayout></LinearLayout>

c. 新增widget时的配置Activity的实现(可选)本介绍没有选择这种方式

d. widget 参数配置文件(文件位置:res\xml)

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"android:initialLayout="@layout/main_syn_widget"android:minHeight="505dip"android:minWidth="729dip"android:previewImage="@drawable/sync_launcher"android:updatePeriodMillis="0" ></appwidget-provider>

e. AndroidManifest.xml 声明

<receiverandroid:name=".widget.SynWidgetProvider"android:permission="android.permission.BIND_APPWIDGET" ><intent-filter><action android:name="android.appwidget.action.APPWIDGET_UPDATE" /></intent-filter><meta-dataandroid:name="android.appwidget.provider"android:resource="@xml/syn_widget_config" />
</receiver>

f. 效果图(九科同步挂件Rjdeng 于2013-4-24
在这里插入图片描述

觉得本文对你有用,麻烦点赞或关注或收藏,你的肯定是我创作的无限动力,谢谢!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/4759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

界面组件DevExpress Blazor UI v23.2 - 网格、工具栏功能全新升级

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验&#xff0c;这个UI自建库提供了一套全面的原生Blazor UI组件&#xff08;包括Pivot Grid、调度程序、图表、数据编辑器和报表等&#xff09;。 DevExpress Blazor控件目前已经升级…

数字文旅重塑旅游发展新生态:以数字化转型为契机,推动旅游产业的创新发展,提升旅游服务的智能化、网络化和个性化水平

目录 一、引言 二、数字化转型推动旅游产业创新发展 1、数字化转型提升旅游产业效率 2、数字化转型拓展旅游产业边界 3、数字化转型促进旅游产业可持续发展 三、提升旅游服务智能化、网络化和个性化水平 1、智能化提升旅游服务体验 2、网络化拓宽旅游服务渠道 3、个性…

爬虫的实战应用之短信炸弹playwright现代网页测试工具

不讲废话&#xff0c;先上原理&#xff1a; 短信炸弹&#xff0c;也就是说持续对一个手机进行发送短信&#xff0c;实现的方式就是&#xff0c;利用某些网站的登录 &#xff0c;注册的时候&#xff0c;发送短信验证码来实现。 如下图&#xff0c;其中有一个id为phone的输入框&a…

配置nodejs的俩小脚本

介绍&#xff1a;共两个脚本。 脚本1&#xff0c;用来配置环境变量&#xff0c;生成环境变量所需的配置信息&#xff0c;然后自己添加到系统环境变量里去 特别注意&#xff1a;该脚本需要放到nodejs目录下面&#xff0c;如果不是&#xff0c;则无法生成环境变量配置文本内容 另…

Java代码审计-flink-streaming-platform-web

前言 项目地址&#xff1a;GitHub - zhp8341/flink-streaming-platform-web: 基于flink的实时流计算web平台 flink-streaming-platform-web是一个将flink封装的一个可视化的、轻量级的flink web客户端系统&#xff0c;用户只需在web 界面进行sql配置就能完成流计算任务。 项目…

【Elasticsearch<一>✈️✈️】简单安装使用以及各种踩坑

目录 &#x1f378;前言 &#x1f37b;一、软件安装&#xff08;Windows版&#xff09; 1.1、Elasticsearch 下载 2.1 安装浏览器插件 3.1、安装可视化工具 Kibana 4.1、集成 IK 分词器 &#x1f37a;二、安装问题 &#x1f379;三、测试 IK 分词器 ​&#x1f377; 四、章…

Golang | Leetcode Golang题解之第55题跳跃游戏

题目&#xff1a; 题解&#xff1a; // 贪心算法 func canJump(nums []int) bool {cover : 0n : len(nums)-1for i : 0; i < cover; i { // 每次与覆盖值比较cover max(inums[i], cover) //每走一步都将 cover 更新为最大值if cover > n {return true}}return false } …

如何买到“30元以下”的免备案服务器?

对于预算有限的个人和小型企业来说&#xff0c;30 元以下免备案服务器的价格非常亲民。用户可以以极低的成本获得所需的服务器资源&#xff0c;这对创业者、个人开发者、学生和站长来说简直不要太划算&#xff0c;毕竟配置可以升级真不够后面再付费升级也行。 何为“免备案”&…

Android双向认证配置过程

1&#xff08;可以绕过&#xff09;准备过程 为了让这个教程可以一直复用&#xff0c;打算直接写一个双向认证的APP作为素材。 工具&#xff1a; ●protecle&#xff08;签名文件转换&#xff09; ●keytool&#xff08;java自己就有&#xff09; ●openssl&#xff08;apache里…

NLP transformers - 文本分类

Text classification 文章目录 Text classification加载 IMDb 数据集Preprocess 预处理EvaluateTrainInference 本文翻译自&#xff1a;Text classification https://huggingface.co/docs/transformers/tasks/sequence_classification notebook : https://colab.research.googl…

FPGA 以太网概念简单学习

1 MAC和PHY 从硬件的角度来说&#xff0c;以太网接口电路主要由 MAC &#xff08; Media Access Control &#xff09;控制器和物理层接口 PHY&#xff08;Physical Layer &#xff0c; PHY &#xff09;两大部分构成。 MAC 指媒体访问控制子层协议&#xff0c;它和 PHY 接…

创建获利段

事务代码&#xff1a;KE21N BAPI&#xff1a;BAPI_COPAACTUALS_POSTCOSTDATA 前台操作&#xff1a; 表是业务配置的 配置路径&#xff1a; 代码&#xff1a;BAPI不返回生成的凭证号和获利段&#xff0c;需要通过增强或者读表获取 ls_copa_data-record_id 000001.ls_co…

Agent AI智能体在未来,一定与你我密不可分

随着Agent AI智能体的逐渐成熟&#xff0c;人工智能应用的不断深入与拓展&#xff0c;相信在不久的将来&#xff0c;他与你我的生活一定是密不可分的。 目录 ​编辑 1 Agent AI智能体是什么&#xff1f; 2 Agent AI在语言处理方面的能力 2.1 情感分析示例 2.2 文本分类任…

Spring - 5 ( 8000 字 Spring 入门级教程 )

一&#xff1a;Spring IoC&DI 1.1 方法注解 Bean 类注解是添加到某个类上的&#xff0c; 但是存在两个问题: 使用外部包里的类, 没办法添加类注解⼀个类, 需要多个对象, ⽐如多个数据源 这种场景, 我们就需要使用方法注解 Bean 我们先来看方法注解如何使用: public c…

Unity 踩坑记录 Rigidbody 刚体重力失效

playerSetting > physics > Gravity > 设置 Y 的值为负数

前端canvas项目实战——在线图文编辑器(九):逻辑画布

目录 前言一、 效果展示二、 实现步骤1. 调整布局&#xff0c;最大化利用屏幕空间2. 添加逻辑画布3. 添加遮罩4. 居中显示逻辑画布5. 一个容易被忽视的bug点 三、Show u the code后记 前言 上一篇博文中&#xff0c;我们实现了一组通用的功能按钮&#xff1a;复制、删除、锁定…

FreeRTOS之列表

1.FreeRTOS的列表和列表项十分重要。列表类相当于链表&#xff0c;列表项则相当于链表中的节点。列表项的地址是非连续的&#xff0c;列表项的数量可随时修改。在OS中的任务状态和数量会发生改变&#xff0c;因此使用列表可以很好的满足需求。 列表和列表项的相关定义与操作函…

电商独立站||跨境电商独立站网站搭建|功能系统搭建||API接口接入

搭建多语言跨境电商独立站系统 前台主要功能模块 短信接口 第三方登陆 支付方式 会员中心 代购订单列表 - new 会员签到 -1000(1) new 支付密码 ---1000 国内流程 -----5000 new 订单运单多退少补 -1000 未付款运单取消功能 - 修改运单运输方式 -----1000 年费会员 -----3000 …

大型零售企业,适合什么样的企业邮箱大文件解决方案?

大型零售企业通常指的是在全球或特定地区内具有显著市场影响力和知名度的零售商。这些企业不仅在零售业务收入上达到了惊人的规模&#xff0c;而且在全球范围内拥有广泛的销售网络和实体店铺。它们在快速变化的零售行业中持续创新&#xff0c;通过实体店、电商平台等多种渠道吸…

C#队列(Queue)的基本使用

概述 在编程中&#xff0c;队列&#xff08;Queue&#xff09;是一种常见的数据结构&#xff0c;它遵循FIFO&#xff08;先进先出&#xff09;的原则。在C#中&#xff0c;.NET Framework提供了Queue<T>类&#xff0c;它位于System.Collections.Generic命名空间下&#x…