详解Android Widget实例开发应用

移动开发
Android Widget实例开发应用是本文要介绍的内容,主要是来了解并学习Android Widget实例应用的开发,具体内容的实现来看本文详解。

Android Widget实例开发应用是本文要介绍的内容,主要是来了解并学习Android Widget实例应用的开发,具体内容的实现来看本文详解。

Widget并不支持所有的Android组件,只能在Widget中使用如下组件类:

(1)用于布局的组件类。

FrameLayout   LinearLayout   RelativeLayout

(2)可视组件类

  1. AnalogClock  ImageView   ProgressBar   TextView   Button  Chronometer  ImageButton 

创建Widget描述文件,该文件是Xml格式,必须放在res\xml目录中 

  1.  <?xml version="1.0" encoding="utf-8"?>    
  2.  <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"   
  3.     android:minWidth="309dip"   
  4.      android:minHeight="192dip"   
  5.      android:initialLayout="@layout/main"    初始化布局    
  6.      android:updatePeriodMillis="1000"       更新的时间间隔(毫秒)    
  7.  />   
  8.  
  9. 建立Widget类,该类必须从AppWidgetProvider类继承(AppWidgetProvider是BroadcastReceiver的子类,因此,Widget类可以接受广播消息)    
  10.  
  11. 在AndroidManifest.xml文件中定义widget    
  12.    
  13.  <receiver android:label="@string/app_name" android:name=".HelloWidget">    
  14.              <intent-filter>    
  15.                  <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>    
  16.             </intent-filter>    
  17.            <meta-data android:name="android.appwidget.provider"   
  18.                  android:resource="@xml/hello_widget_provider"/>    
  19. </receiver>   
  20.  
  21. 显示时间,每秒更新    
  22.  
  23.  public class HelloWidget extends AppWidgetProvider {    
  24.      private Timer timer;    
  25.      private int[] appWidgetIds;    
  26.      private AppWidgetManager appWidgetManager;    
  27.      private Context context;    
  28.  
  29.      @Override   
  30.      public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {    
  31.          super.onUpdate(context, appWidgetManager, appWidgetIds);    
  32.          Log.i("Widget", "onUpdate");    
  33.          this.context = context;    
  34.          this.appWidgetManager = appWidgetManager;    
  35.          this.appWidgetIds = appWidgetIds;    
  36.          timer = new Timer();    
  37.          timer.schedule(task, 0,1000);    
  38.  }    
  39.      private Handler handler = new Handler(){    
  40.          @Override   
  41.          public void handleMessage(Message msg) {    
  42.              super.handleMessage(msg);    
  43.              switch (msg.what) {    
  44.              case 1:    
  45.                  Time myTime = new Time();    
  46.                  myTime.setToNow();    
  47.                  RemoteViews updateViews =     
  48.                      new RemoteViews(context.getPackageName(),    
  49.                        R.layout.main);    
  50.                  updateViews.setTextViewText(R.id.widget_textview, "北京时间"+myTime.format("%H:%M:%S"));    
  51.                  Log.i("Widget", "北京时间"+myTime.format("%H:%M:%S"));    
  52.  //              ComponentName thisWidget = new ComponentName(context,HelloWidget.class);    
  53.  //              appWidgetManager.updateAppWidget(thisWidget, updateViews);    
  54.                  appWidgetManager.updateAppWidget(appWidgetIds, updateViews);    
  55.                  break;    
  56.              default:    
  57.                  break;    
  58.              }    
  59.          }    
  60.      };    
  61.      private TimerTask task = new TimerTask() {    
  62.          public void run() {    
  63.              handler.sendEmptyMessage(1);    
  64.          }    
  65.      };    
  66.  }  

音乐播放widget

  1. package cn.stay.widget;    
  2. import android.app.PendingIntent;    
  3. import android.appwidget.AppWidgetManager;    
  4. import android.appwidget.AppWidgetProvider;    
  5. import android.content.Context;    
  6. import android.content.Intent;    
  7. import android.os.Handler;    
  8.  
  9. import android.os.Message;    
  10. import android.widget.RemoteViews;    
  11. import cn.aoran.activity.R;       
  12. public class HelloWidget extends AppWidgetProvider {    
  13.     private static final String WIDGET_BACK = "cn.stay.widget.back";    
  14.     private static final String WIDGET_PLAY = "cn.stay.widget.play";    
  15.     private static final String WIDGET_NEXT = "cn.stay.widget.next";    
  16.     private static final String WIDGET_SONG = "cn.stay.widget.song";    
  17.     private static final String WIDGET_CURRENT = "cn.stay.widget.current";    
  18.     private String song = "";    
  19.     private static Context context;    
  20.     private static AppWidgetManager appWidgetManager;    
  21.     private static int[] appWidgetIds;    
  22.  
  23.     @Override   
  24.     public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {    
  25.         super.onUpdate(context, appWidgetManager, appWidgetIds);    
  26.         HelloWidget.context = context;    
  27.         HelloWidget.appWidgetIds = appWidgetIds;    
  28.         HelloWidget.appWidgetManager = appWidgetManager;    
  29.         handler.sendEmptyMessage(0);    
  30.     }    
  31.     
  32.     @Override   
  33.     public void onReceive(Context context, Intent intent) {    
  34.         super.onReceive(context, intent);    
  35.         if (WIDGET_SONG.equals(intent.getAction())) {    
  36.             song = intent.getStringExtra("song");    
  37.             if (song == null || "".equals(song.trim())) {    
  38.                 song = "未知";    
  39.             }    
  40.             if (context != null) {    
  41.                 handler.sendEmptyMessage(1);    
  42.             }    
  43.         }    
  44.     }    
  45.     private Handler handler = new Handler() {    
  46.         public void handleMessage(Message msg) {    
  47.             RemoteViews widgetViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);    
  48.             super.handleMessage(msg);    
  49.             switch (msg.what) {    
  50.             case 0:    
  51.                 context.sendBroadcast(new Intent(WIDGET_CURRENT));    
  52.                 // Intent intent = new Intent(context,LocalActivity.class);    
  53.                 // PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent, 0);    
  54.                 // widgetViews.setOnClickPendingIntent(R.id.widget_sub, pIntent);    
  55.                 // 上一首    
  56.                 PendingIntent backIntent = PendingIntent.getBroadcast(context, 0, new Intent(WIDGET_BACK), 0);    
  57.                 widgetViews.setOnClickPendingIntent(R.id.widget_back_btn, backIntent);    
  58.                 // 下一首    
  59.                 PendingIntent nextIntent = PendingIntent.getBroadcast(context, 0, new Intent(WIDGET_NEXT), 0);    
  60.                 widgetViews.setOnClickPendingIntent(R.id.widget_next_btn, nextIntent);    
  61.                 // 播放    
  62.                 PendingIntent playIntent = PendingIntent.getBroadcast(context, 0, new Intent(WIDGET_PLAY), 0);    
  63.                 widgetViews.setOnClickPendingIntent(R.id.widget_play_btn, playIntent);    
  64.                 appWidgetManager.updateAppWidget(appWidgetIds, widgetViews);    
  65.                 break;    
  66.             case 1:    
  67.                 widgetViews.setTextViewText(R.id.widget_song, song);    
  68. //              ComponentName thisWidget = new ComponentName(context, HelloWidget.class);    
  69. //              AppWidgetManager manager = AppWidgetManager.getInstance(context);    
  70.                 appWidgetManager.updateAppWidget(appWidgetIds, widgetViews);    
  71.                 break;    
  72.             default:    
  73.                 break;    
  74.             }    
  75.         }    
  76.     
  77.     };    
  78. }  

 
小结:详解Android Widget实例开发应用的内容介绍完了,希望通过Android Widget实例内容的学习能对你有所帮助!

责任编辑:zhaolei 来源: 博客园
相关推荐

2011-09-09 20:14:58

Android Wid

2010-07-13 09:02:19

Widget开发

2011-09-07 17:54:40

Android Wid开发

2011-02-28 13:04:27

RelativeLayAndroid Wid

2011-09-07 14:01:41

Android Wid实例

2011-09-07 13:18:40

Android Wid

2011-09-08 17:48:33

Web Widget

2011-09-07 13:42:36

Android Wid实例

2011-09-07 16:28:46

QT WidgetQWidget

2011-09-08 13:41:53

Widget

2011-04-12 08:40:23

IMFAndroid

2011-09-07 10:34:48

Android Wid

2010-07-23 08:54:02

2011-09-09 10:00:20

Android Wid开发

2009-04-02 15:58:12

AndroidEclipseSqlite

2010-07-26 14:25:06

Widget开发

2010-07-26 14:44:47

Widget开发

2011-09-08 15:40:45

Android Wid组件

2011-09-08 14:01:01

Android Wid实例

2011-09-07 13:00:36

点赞
收藏

51CTO技术栈公众号