緊接上集,appwidget的周期函數對應的事件:
onUpdate:到達指定時間之後或者使用者向桌面添加appwidget時候會調用這個方法。
onDelete:當appwidget被删除時,會調用這個方法。
onEnable:當一個appwidget第一次被建立,會調用這個方法。
onDisable:當最後一個appwidget執行個體被删除後,會調用這個方法。
onReveice:接受廣播事件。
調試出來了麼?
這集内容是如何與appwidget互動:
我們實作的功能是建立一個appwidget(為一個button),點選後,啟動一個activity。
同樣是新知識介紹:
1、我們的appwidget與我們對應的activity不是同一個程序,appwidget是homescreen中的一個程序。是以,我們不能直接對某一個控件進行事件監聽,而是通過RemoteViews進行處理,而且我們也不能直接用intent進行啟動activity,用pendingintent。
2、pendingintent:顧名思義,是還未确定的Intent。可以看做是對intent的一個包裝,目的是對RemoteViews進行設定。形象點講就是我們程序A中的intent想要在程序B中執行,需要pendingintent進行包裝,然後添加到程序B中,程序B中遇到某個事件,然後執行intent。
建立pendingintent有三個方法:getActivity(context,requestCode,intent,flags)。getService()。getBroadcast()。
3、RemoteViews:即遠端的views。他的作用是他所表示的對象運作在另外的程序中。
現在話不多說,果斷代碼:
1、我們在上集的appwidget.xml中(即桌面控件上加上一個Button)代碼:
Java代碼
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="測試按鈕"
/>
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="測試按鈕"
/>
2、我們在provider中的onUpdate方法中進行處理:
Java代碼
for(inti=0;i
System.out.println(appWidgetIds[i]);
//新intent
Intent intent = newIntent(context,Appwidget2Activity.class);
//建立一個pendingIntent。另外兩個參數以後再講。
PendingIntent pendingIntent = PendingIntent.getActivity(
context, 0, intent,0);
//建立一個remoteViews。
RemoteViews remoteViews = newRemoteViews(
context.getPackageName(), R.layout.appwidget);
//綁定處理器,表示控件單擊後,會啟動pendingIntent。
remoteViews.setOnClickPendingIntent(R.id.button, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
}
for(int i= 0;i
System.out.println(appWidgetIds[i]);
//新intent
Intent intent = new Intent(context,Appwidget2Activity.class);
//建立一個pendingIntent。另外兩個參數以後再講。
PendingIntent pendingIntent = PendingIntent.getActivity(
context, 0, intent, 0);
//建立一個remoteViews。
RemoteViews remoteViews = new RemoteViews(
context.getPackageName(), R.layout.appwidget);
//綁定處理器,表示控件單擊後,會啟動pendingIntent。
remoteViews.setOnClickPendingIntent(R.id.button, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
}
因為我們可能有多個appwidget,是以要周遊。建立一個intent,與要啟動的activity關聯起來,然後根據該intent建立一個pendingintent。然後根據appwidget.xml建立一個remoteViews,然後對該views中的一個控件進行pendingintent綁定。