我試圖創建一個應用小部件,當它按下時,會觸發後臺作業,將時間和位置保存到數據庫。設置用於執行後臺作業的小部件按鈕
從我迄今爲止能夠收集的信息來看,我可能需要的設置包括一個AppWidgetProvider子類,它的onUpdate()負責在RemoteView上設置一個代表窗口小部件按鈕的PendingIntent。它的onReceive()方法會捕獲來自PendingIntent的廣播,我可能會從這裏開始執行後臺任務。
如果我到目前爲止正確的軌道上,我有一個挑戰,那就是onUpdate()沒有觸發將應用程序小部件添加到桌面上,因此小部件按鈕不能正確設置(它最終沒有做任何事)。我是否必須使用配置活動來設置組件,這又會觸發AppWidgetProvider.onUpdate(),還是有更簡單的解決方案?
如果我不在正確的軌道上,任何指向更好的方式來實現我想要實現的東西將非常感激。 :)
更新:
想我可能會發布一些代碼在這裏。下面是從清單中的接收器定義:
<receiver android:name=".widget.QuickAddWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/quickadd_widget_info" />
</receiver>
這是我的資源文件,定義窗口小部件:
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="72dp"
android:minHeight="72dp"
android:initialLayout="@layout/quickadd_widget"
android:updatePeriodMillis="0">
</appwidget-provider>
這是QuickAddWidgetProvider:
public class QuickAddWidgetProvider extends AppWidgetProvider {
@Override
public void onReceive(Context context, Intent intent) {
Log.v("QuickAdd", "onReceive()");
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Log.v("QuickAdd", "onUpdate()");
}
}
感謝您的回答。我只是看不到我的意圖過濾器有什麼問題。我用有問題的代碼更新了我的問題,也許另一雙眼睛能夠發現錯誤。爲了記錄,我可以從日誌中看到onReceive()正在被觸發。認爲它可能與updatePeriodMillis設置爲0有關,但是改變它也不會產生onUpdate()調用。 – rogerkk 2011-01-22 18:24:08