1. 接受來自App Widget的廣播
//Androidmanifest中的檔案旨要,只要有個一action符合就會調用繼承AppWidgetProvider的類:
<receiver android:name="繼承AppWidgetProvider的類">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATA"/>
</intent-filter>
<intent-filter>
<action android:name="mars.appwidget03.UPDATE_APP_WIDGET"/> //這是自訂action
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/example_appwidget_info"/>
</receiver>
//在代碼中繼承AppWidgetProvider的類的程況如下:
A. 在Update方法中
Intent intent = new Intent();
intent.setAction("mars.appwidget03.UPDATE_APP_WIDGET");
使用getBroadcast方法得到PendingIntent對象
PendingIntent pendingIntent = PendingIntent.getBroadcast(contect,0,intent對象,0);
B. 再onReciever方法中接收步驟A發送的廣播
2. 更新App Widget當中控制項的狀態
public void onReceive(Context context, Intent intent){
String action = intent.getAction();
if(action == "mars.appwidget03.UPDATE_APP_WIDGET"){
RemoteViews remoteViews = new RemoteViews(context.getPackage , R.layout.example_appwidget);
//修改圖片
remoteViews .setImageViewResource(R.id.imageId , R.drawable.ku);
remoteViews 。setTextViewText(R.id.widgetTextId , "");
//獲得AppWidgetManager 對象
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
//ComponentName指的是整個app widget控制項 , 而RemoteViews指的是app widget裡面的控制項
ComponentName componentName = new ComponentName(context, ExampleAppWidgetProvider.class);
//更新appwidget
appWidgetManager .updateAppWidget(componentName , remoteViews);
}
//必須要有else語句,不然其他的onUpdate,onEnable等函數將不會調用
else{
super onReceive(context,intent);
}
}