2011-12-04 37 views
1

我一直在試圖開發一個小部件,我在我的最後階段,我只有一個障礙 - 如何在設備啓動後再次將一個PendingIntent分配給小部件?如何在設備啓動後設置小部件的PendingIntent

我有接收BOOT_COMPLETED廣播一個BroadcastReceiver:

public static final String TAG = "BootReceiver"; 
private Context c; 
@Override 
public void onReceive(Context c, Intent i) { 
    Log.i(TAG, "Received BOOT_COMPLETED broadcast!"); 

    Intent readPrefsAfterBoot = new Intent(c, my widget class); 
    readPrefsAfterBoot.setAction(* my custom action *); 
    c.sendBroadcast(readPrefsAfterBoot); 
} 

我的AppWidgetProvider接收的自定義操作是這樣的:

** reading saved data from SharedPreferences ** 

       RemoteViews rv = new RemoteViews(context.getPackageName(), my widget layout); 

       AppWidgetManager awm = AppWidgetManager.getInstance(context); 

       Intent intent = new Intent(context,my widget class); 
       intent.setAction(* another custom action *); 
       PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); 
       rv.setOnClickPendingIntent(my button, pi); 
       awm.updateAppWidget(appWidgetIds[i], rv); 

它要麼不工作或強制關閉了一些原因,我無法分析...

+0

嘗試使用日誌進行調試,如果收到廣播並且調用了intent。然後用logcat重啓手機。 – Warpzit

+0

在Eclipse中使用'adb logcat',DDMS或DDMS透視圖查看LogCat並查看與「強制關閉」相關的堆棧跟蹤。 – CommonsWare

+0

這需要我一些時間,因爲我的屏幕上安裝了很多應用程序和很多小部件......但是在此期間,有沒有可能是我的小部件的類中使用的上下文存在問題? – Netanel

回答

0

onUpdate()方法在引導後第一次啓動時調用,這是我通常設置的地方PendingIntent在我的應用程序中。

此外,我發現,如果你有PendingIntent(在我的情況下額外的數據不能正確傳遞)的問題,以重新啓動手機。

相關問題