天天看點

android widget 啟動activity,android之appwidget(二)啟動新activity

緊接上集,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 widget 啟動activity,android之appwidget(二)啟動新activity
android widget 啟動activity,android之appwidget(二)啟動新activity

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代碼

android widget 啟動activity,android之appwidget(二)啟動新activity
android widget 啟動activity,android之appwidget(二)啟動新activity

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綁定。