2011-01-22 19 views
0

我試圖創建一個應用小部件,當它按下時,會觸發後臺作業,將時間和位置保存到數據庫。設置用於執行後臺作業的小部件按鈕

從我迄今爲止能夠收集的信息來看,我可能需要的設置包括一個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()"); 
    } 
} 

回答

1

如果我到目前爲止的正確軌道上

是的!

我有一個挑戰,這是的onUpdate()不觸發上添加應用程序插件到桌面,從而件按鈕是沒有得到正確設置(它結束了doind什麼)

嗯,應該。確保您的AppWidgetProvider的清單中的條目具有接收更新的權利<intent-filter>

<receiver android:name=".AppWidget" android:label="@string/app_name" android:icon="@drawable/icon"> 
     <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> 
     </intent-filter> 
     <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_provider"/> 
</receiver> 
+0

感謝您的回答。我只是看不到我的意圖過濾器有什麼問題。我用有問題的代碼更新了我的問題,也許另一雙眼睛能夠發現錯誤。爲了記錄,我可以從日誌中看到onReceive()正在被觸發。認爲它可能與updatePeriodMillis設置爲0有關,但是改變它也不會產生onUpdate()調用。 – rogerkk 2011-01-22 18:24:08

相關問題