Widgets在文档docs\guide\topics\appwidgets\index.html下

Android中AppWidget的分析与应用:AppWidgetProvider

  一、在 AndroidManifest.xml文件中配置Widgets:

  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2. package="com.example.widget"
  3. android:versionCode="1"
  4. android:versionName="1.0" >
  5.  
  6. <uses-sdk
  7. android:minSdkVersion="8"
  8. android:targetSdkVersion="17" />
  9.  
  10. <application
  11. android:allowBackup="true"
  12. android:icon="@drawable/ic_launcher"
  13. android:label="@string/app_name"
  14. android:theme="@style/AppTheme" >
  15. <receiver android:name=".TimeWidgetProvider" >
  16. <intent-filter>
  17. <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
  18. </intent-filter>
  19. <meta-data
  20. android:name="android.appwidget.provider"
  21. android:resource="@xml/timewidget_info" />
  22. </receiver>
  23. <service android:name=".TimerService"></service>
  24. </application>
  25.  
  26. </manifest>

  二、在项目的res目录下建立xml目录,并且创建 timewidget_info.xml 文件,内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:initialLayout="@layout/time_appwidget"
  4. android:minHeight="40dp"
  5. android:minWidth="40dp"
  6. android:updatePeriodMillis="0" />

  三、在layout文件夹下建立文件time_appwidget.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. android:background="@drawable/rectangle"
  7. >
  8.  
  9. <TextView
  10. android:layout_width="match_parent"
  11. android:layout_height="wrap_content"
  12. android:id="@+id/textView"
  13. android:text="current time"
  14. />
  15.  
  16. </LinearLayout>

  四、在drawable文件夹下建立rectangle.xml文件(这部可以省略,主要是为了美化TextView控件,渐变效果):

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape="rectangle" >
  4.  
  5. <!-- 设置弧度 -->
  6. <corners android:radius="9dp" />
  7.  
  8. <gradient
  9. android:angle="270"
  10. android:endColor="#5EADF4"
  11. android:startColor="#B3F0FF" />
  12.  
  13. <padding
  14. android:bottom="5dp"
  15. android:left="5dp"
  16. android:right="5dp"
  17. android:top="5dp" />
  18.  
  19. <stroke
  20. android:dashGap="1dp"
  21. android:dashWidth="10dp"
  22. android:width="6dp"
  23. android:color="#0000FF" />
  24.  
  25. </shape>

  五、后台代码实现:

  1. package com.example.widget;
  2.  
  3. import android.appwidget.AppWidgetManager;
  4. import android.appwidget.AppWidgetProvider;
  5. import android.content.Context;
  6. import android.content.Intent;
  7.  
  8. public class TimeWidgetProvider extends AppWidgetProvider {
  9.  
  10. @Override
  11. public void onUpdate(Context context, AppWidgetManager appWidgetManager,
  12. int[] appWidgetIds) {
  13. super.onUpdate(context, appWidgetManager, appWidgetIds);
  14. }
  15.  
  16. //当一个Widgets时会被调用
  17. public void onDeleted(Context context, int[] appWidgetIds) {
  18. // TODO Auto-generated method stub
  19. super.onDeleted(context, appWidgetIds);
  20. }
  21.  
  22. //第一次往桌面添加Widgets时会被调用,之后添加同类型Widgets不会被调用
  23. public void onEnabled(Context context) {
  24. context.startService(new Intent(context, TimerService.class));
  25. }
  26.  
  27. //从桌面上删除最后一个Widgets时会被调用
  28. public void onDisabled(Context context) {
  29. context.stopService(new Intent(context, TimerService.class));
  30. }
  31.  
  32. }
  1. package com.example.widget;
  2.  
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. import java.util.Timer;
  6. import java.util.TimerTask;
  7.  
  8. import android.annotation.SuppressLint;
  9. import android.app.Service;
  10. import android.appwidget.AppWidgetManager;
  11. import android.content.ComponentName;
  12. import android.content.Intent;
  13. import android.os.IBinder;
  14. import android.widget.RemoteViews;
  15.  
  16. public class TimerService extends Service {
  17. private Timer timer;
  18.  
  19. @Override
  20. public void onCreate() {
  21. super.onCreate();
  22. timer = new Timer();
  23. timer.schedule(new MyTimerTask(), 0, 1000);
  24. }
  25. private final class MyTimerTask extends TimerTask{
  26. @SuppressLint("SimpleDateFormat")
  27. @Override
  28. public void run() {
  29. SimpleDateFormat sdf= new SimpleDateFormat("hh:mm:ss");
  30. String time = sdf.format(new Date());
  31. //获取Widgets管理器
  32. AppWidgetManager widgetManager =AppWidgetManager.getInstance(getApplicationContext());
  33. //widgetManager所操作的Widget对应的远程视图即当前Widget的layout文件
  34. RemoteViews remoteView = new RemoteViews(getPackageName(), R.layout.time_appwidget);
  35. remoteView.setTextViewText(R.id.textView, time);
  36. //当点击Widgets时触发的世界
  37. //remoteView.setOnClickPendingIntent(viewId, pendingIntent)
  38. ComponentName componentName = new ComponentName(getApplicationContext(),TimeWidgetProvider.class);
  39. widgetManager.updateAppWidget(componentName, remoteView);
  40. }
  41. }
  42.  
  43. @Override
  44. public void onDestroy() {
  45. timer.cancel();
  46. timer=null;
  47. super.onDestroy();
  48. }
  49.  
  50. @Override
  51. public IBinder onBind(Intent intent) {
  52. return null;
  53. }
  54.  
  55. }

Android学习笔记_33_Widget时钟(MetaData)的更多相关文章

  1. Android学习笔记(20):时钟(AnalogClock和TextClock)和计时器(Chronometer)

    时钟文本TextClock继承自TextView.是用于显示当前时间的文本框. TextClock支持的XML属性和相关方法 XML属性 相关方法 说明 android:format12Hour se ...

  2. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

  3. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  4. android学习笔记36——使用原始XML文件

    XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...

  5. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  6. udacity android 学习笔记: lesson 4 part b

    udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

  7. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

  8. Android学习笔记之Activity详解

    1 理解Activity Activity就是一个包含应用程序界面的窗口,是Android四大组件之一.一个应用程序可以包含零个或多个Activity.一个Activity的生命周期是指从屏幕上显示那 ...

  9. Pro Android学习笔记 ActionBar(1):Home图标区

     Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...

随机推荐

  1. python实现excel转json的例子

    python实现excel转json的例子(改进版) 由于数值策划给出数值是excel表格,但前台flash程序用的又是json格式.服务器也用了json格式,而json又是utf-8编码的,用C++ ...

  2. 《springcloud 四》服务保护机制

    服务保护机制SpringCloud Hystrix 微服务高可用技术 大型复杂的分布式系统中,高可用相关的技术架构非常重要. 高可用架构非常重要的一个环节,就是如何将分布式系统中的各个服务打造成高可用 ...

  3. 在 Flask 应用中使用 gevent

    在 Flask 应用中使用 gevent 普通的 flask 应用 通常在用 python 开发 Flask web 应用时,使用 Flask 自带的调试模式能够给开发带来极大便利.Flask 自带的 ...

  4. 深入理解JavaScript系列(27):设计模式之建造者模式

    介绍 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定. ...

  5. WPF - MVVM 之TreeView

    在项目中使用OnPropertyChanged方法,最简单的实例: private event PropertyChangedEventHandler PropertyChanged; protect ...

  6. 获取当前的日期时间的js函数,格式为“yyyy-MM-dd hh:mm:ss”

    //获取当前的日期时间函数,格式为“yyyy-MM-dd hh:mm:ss” function getNowFormatDate(date) { if (date == null) { var dat ...

  7. Android使用主题属性引发的问题

    最近在做一个项目的Porting.直接改变了应用的Theme,最没有仔细的检查.结果应用在某些场景下直接就Crash了.还好,通过Log可以看到是在Inflate某个资源的时候出错导致的.通过定位资源 ...

  8. 个人MySQL股票数据库的建立日记

    #!/usr/bin/python# -*- coding: UTF-8 -*- import tushare as tsfrom sqlalchemy import create_engine co ...

  9. JS图片赖加载例子

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. matlab练习程序(单源最短路径Dijkstra)

    图的相关算法也算是自己的一个软肋了,当年没选修图论也是一大遗憾. 图像处理中,也有使用图论算法作为基础的相关算法,比如图割,这个算法就需要求最大流.最小割.所以熟悉一下图论算法对于图像处理还是很有帮助 ...