ANDROID_MARS學習筆記_S02_006_APPWIDGET3_AppWidget發送廣播及更新AppWidget

來源:互聯網
上載者:User

標籤:

一、簡介

 

二、代碼
1.xml
(1)example_appwidget.xml

 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3     android:orientation="vertical" 4     android:layout_width="fill_parent" 5     android:layout_height="fill_parent" 6     > 7 <TextView   8     android:id="@+id/widgetTextId" 9     android:layout_width="fill_parent" 10     android:layout_height="wrap_content" 11     android:text="firstWidgetText"12     android:background="#000000"13     />14 <ImageView15     android:id="@+id/imageId"16     android:layout_width="wrap_content"17     android:layout_height="wrap_content"18     android:src="@drawable/xiao"19     />20 <Button21     android:id="@+id/widgetButtonId"22     android:layout_width="fill_parent"23     android:layout_height="wrap_content"24     android:text="測試用按鈕"25     />26 </LinearLayout>

 

(2)AndroidManifest.xml

增加action類型以接收廣播

1  <receiver android:name="ExampleAppWidgetProvider">2             <intent-filter>3                 <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>4                 <action android:name="tony.appwidget03.UPDATE_APP_WIDGET"/>5             </intent-filter>6             <meta-data android:name="android.appwidget.provider" android:resource="@xml/example_appwidget_info"/>7             8         </receiver>

 

2.java
(1)ExampleAppWidgetProvider.java

 1 package com.appwidget; 2  3 import android.app.PendingIntent; 4 import android.appwidget.AppWidgetManager; 5 import android.appwidget.AppWidgetProvider; 6 import android.content.ComponentName; 7 import android.content.Context; 8 import android.content.Intent; 9 import android.widget.RemoteViews;10 11 public class ExampleAppWidgetProvider extends AppWidgetProvider{12 13     //定義一個常量字串,該常量用於命名Action14     private static final String UPDATE_ACTION = "tony.appwidget03.UPDATE_APP_WIDGET";15     16     // 使按鈕被click時發送廣播17     @Override18     public void onUpdate(Context context, AppWidgetManager appWidgetManager,19             int[] appWidgetIds) {20         //建立一個Intent對象21         Intent intent = new Intent();22         //為Intent對象設定Action23         intent.setAction(UPDATE_ACTION);24         //使用getBroadcast方法,得到一個PendingIntent對象,當該對象執行時,會發送一個廣播25         PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);26         RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);27         remoteViews.setOnClickPendingIntent(R.id.widgetButtonId, pendingIntent);28         appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);29     }30     31     /**32      * 接收廣播,如果查UPDATE_ACTION,則更新文本和圖片33      * @param context34      * @param intent35      */36     @Override37     public void onReceive(Context context, Intent intent) {38         System.out.println(UPDATE_ACTION + "----------->" + intent.getAction());39         if(UPDATE_ACTION.equals(intent.getAction())) {40             //擷取代表此appwidget控制項的remoteviews41             RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);42             //用remoteviews設定文本、圖片43             remoteViews.setImageViewResource(R.id.imageId, R.drawable.ku);44             remoteViews.setTextViewText(R.id.widgetTextId, "更新的文本");45             AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);46             ComponentName componentName = new ComponentName(context, ExampleAppWidgetProvider.class);47             appWidgetManager.updateAppWidget(componentName, remoteViews);48         } else {49             super.onReceive(context, intent);50         }51     }52     53     /*@Override54     public void onUpdate(Context context, AppWidgetManager appWidgetManager,55             int[] appWidgetIds) { //每個widget都有id56         System.out.println("onupdate");57         for(int i = 0; i < appWidgetIds.length ; i++) {58             System.out.println(appWidgetIds[i]);59             //建立一個Intent對象60             Intent intent = new Intent(context, TargetActivity.class);61             //建立一個PendingIntent62             PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);63             RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);64             //為按鈕綁定事件處理器65             //第一個參數用來指定被綁定處理器的控制項的ID66             //第二個參數用來指定當事件發生時,哪個PendingIntent將會被執行67             remoteViews.setOnClickPendingIntent(R.id.widgetButtonId, pendingIntent);68             //更新AppWidget69             //第一個參數用於指定被更新AppWidget的ID70             appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);71         }72         super.onUpdate(context, appWidgetManager, appWidgetIds);73     }*/74 75     @Override76     public void onDeleted(Context context, int[] appWidgetIds) {77         System.out.println("onDeleted");78         super.onDeleted(context, appWidgetIds);79     }80 81     @Override82     public void onDisabled(Context context) {83         System.out.println("onDisabled");84         super.onDisabled(context);85     }86 87     @Override88     public void onEnabled(Context context) {89         System.out.println("onEnabled");90         super.onEnabled(context);91     }92 93     94 }

 

(2).java

ANDROID_MARS學習筆記_S02_006_APPWIDGET3_AppWidget發送廣播及更新AppWidget

聯繫我們

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