【天氣APP】之案頭時鐘witget組件

來源:互聯網
上載者:User

標籤:arm   ids   hit   ui組件   gets   服務   datetime   appwidget   廣播   

 案頭時鐘之組件開發:

整個流程例如以下:

demo:www.github.com/xufeifandj 

service+組件+廣播進行後台即時更新時間

(一)開機廣播監聽開機啟動service服務啟動後。馬上動態注冊一個廣播去監聽時間發生變化。

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_TIME_TICK);  //時間發生改變
intentFilter.addAction(Intent.ACTION_TIME_CHANGED); //
intentFilter.addAction(Intent.ACTION_DATE_CHANGED); //日期改動
intentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED); //時區改動
this.getBaseContext().registerReceiver(widgetsUpdateReceiver, intentFilter);

(二) 廣播監聽到有時間發生改變,就可以進行更新群組件

class UpdateReceiver extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {
updateWidget();
}

}
//發送廣播去更新群組件就可以
public synchronized void updateWidget() {
sendBroadcast(new Intent("com.android.FERRIS_UPDATE_WIDGET"));
}

(3) WeatherWidget_time 繼承於 AppWidgetProvider事實上也是一個廣播。

我們在這裡注冊了一些更新的action

//組件發生改變時候。進行更新

public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
for (int i = 0; i < appWidgetIds.length; i++) {
   RemoteViews updateView = lewaBuildUpdate(context, appWidgetIds[i],false,true,true);
   appWidgetManager.updateAppWidget(appWidgetIds[i], updateView);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}


@Override
public void onReceive(final Context context, Intent intent) {
        if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){//開機啟動
        //啟動時間後台服務。動態去注冊廣播
        Intent service=new Intent(context, WidgetTimeService.class); 
        context.startService(service);
        updateTimeAlarm(context); //並去更新一下時鐘
        }else if(intent.getAction().equals("com.android.FERRIS_UPDATE_WIDGET")){ //監聽到時間變化。更新wiget
        updateTimeAlarm(context);
        }

super.onReceive(context, intent);
}



(4)更新時間

public synchronized void updateTimeAlarm(Context context){
// AppWidgetManager appWidgetManger = AppWidgetManager  
//                .getInstance(context);  
//        int[] appIds = appWidgetManger.getAppWidgetIds(new ComponentName(  
//                context, WeatherWidgetV5_time.class));  
//       
        ComponentName provider = new ComponentName(context,context.getPackageName()+ ".WeatherWidget_time");
AppWidgetManager gm = AppWidgetManager.getInstance(context);
int[] appWidgetIds;
appWidgetIds = gm.getAppWidgetIds(provider);
        
for (int i = 0; i < appWidgetIds.length; i++) { //遍曆進行更新
   RemoteViews updateView = lewaBuildUpdate(context, appWidgetIds[i],false,true,true); //更新UI組件。參數為分別為日期 星期 等。是否更新
   gm.updateAppWidget(appWidgetIds[i], updateView);
}
}


【天氣APP】之案頭時鐘witget組件

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.