android 視窗小組件(例子)

來源:互聯網
上載者:User

主程式,運行視窗小組件的時候調用的類。需要在manifest.xml中註冊。package com.example.widgettext;import java.util.ArrayList;import java.util.Timer;import java.util.TimerTask;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.Context;import android.widget.RemoteViews;public class AppClockWidgetProvider extends AppWidgetProvider {private static RemoteViews mRemoteViews;private static Timer mTimer;// mAppWidgetArray 儲存視窗組件執行個體的數組private static ArrayList mAppWidgetArray = new ArrayList();// 當最後一個視窗組件執行個體被移除時調用public void onDisabled(Context context) {// TODO Auto-generated method stubsuper.onDisabled(context);stopTimerTask();}// 當第一個視窗組件執行個體被建立時調用public void onEnabled(Context context) {// TODO Auto-generated method stubsuper.onEnabled(context);startTimerTask(context);}// 視窗組件執行個體建立時調用public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {// TODO Auto-generated method stubsuper.onUpdate(context, appWidgetManager, appWidgetIds);updateAppWidget(context, appWidgetManager, appWidgetIds);addInstance(appWidgetIds);}// 視窗組件執行個體刪除時調用public void onDeleted(Context context, int[] appWidgetIds) {// TODO Auto-generated method stubsuper.onDeleted(context, appWidgetIds);removeInstance(appWidgetIds);}// 更新單個視窗組件執行個體public static void updateAppWidget(Context context,AppWidgetManager appWidgeManger, int[] appWidgetIds) {mRemoteViews = new RemoteViews(context.getPackageName(),R.layout.activity_main);MyTimeAdapter timeAdapter = new MyTimeAdapter();String timeString = timeAdapter.formatTime();mRemoteViews.setTextViewText(R.id.myTextView, timeString);appWidgeManger.updateAppWidget(appWidgetIds, mRemoteViews);}// 更新所有視窗組件執行個體public static void RefreshAllWidget(Context context) {AppWidgetManager appWidgetManger = AppWidgetManager.getInstance(context);int instanceCount = mAppWidgetArray.size();for (int i = 0; i < instanceCount; i++) {int[] appWidgetIds = mAppWidgetArray.get(i);updateAppWidget(context, appWidgetManger, appWidgetIds);}}// 增加視窗組件執行個體public static void addInstance(int[] appWidgetIds) {if (mAppWidgetArray != null) {mAppWidgetArray.add(appWidgetIds);}}// 刪除視窗組件執行個體public static void removeInstance(int[] appWidgetIds) {if (mAppWidgetArray != null) {mAppWidgetArray.remove(appWidgetIds);}}// 開啟重新整理視窗組件的定時器public static void startTimerTask(final Context context) {if (mTimer == null) {mTimer = new Timer();TimerTask mTimerTask = new TimerTask() {@Overridepublic void run() {// TODO Auto-generated method stubAppClockWidgetProvider.RefreshAllWidget(context);}};mTimer.schedule(mTimerTask, 0, 1000);}}// 關閉重新整理視窗組件的定時器public static void stopTimerTask() {if (mTimer != null) {mTimer.cancel();mTimer = null;}}}

在主程式中用到的一個adapter

 

package com.example.widgettext;import java.util.Calendar;public class MyTimeAdapter {private Calendar mCalendar;public MyTimeAdapter() {long time = System.currentTimeMillis();mCalendar = Calendar.getInstance();mCalendar.setTimeInMillis(time);}public int getHour() {return mCalendar.get(Calendar.HOUR_OF_DAY);}public int getMinutes() {return mCalendar.get(Calendar.MINUTE);}public int getSecond() {return mCalendar.get(Calendar.SECOND);}public String formatTime() {String timeString = getHour() + : + getMinutes() + : + getSecond();return timeString;}}
在res/xml檔案夾下配置的一個檔案,用來確定視窗小組件的大小。

 

 

在manifest.xml的內容(與運行activity的程式不同,這裡的action配置為receiver)

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.