2012-07-22 67 views
0

我正在嘗試爲我的應用程序實現一個小部件,但是我遇到了PendingIntent軟件包的問題。Android Widget PendingIntent軟件包返回null

我的小工具有兩個按鈕,如果有人被按下,小部件應該更新其內容。 但是,如果我不能更新onReceive方法中的小部件,因爲該包總是null。任何想法?

public class StudyWidgetProvider extends AppWidgetProvider { 

private static String LOG_TAG = StudyWidgetProvider.class.toString(); 
private static String BUTTON_BACK = "BUTTON_BACK"; 
private static String BUTTON_FORWARD = "BUTTON_FORWARD"; 

private Calendar currentDate = Calendar.getInstance(); 
private RemoteViews widget; 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 

    for(int i=0; i<appWidgetIds.length; i++){ 
     Log.i(LOG_TAG, "Update Widget"); 
     Intent intent = new Intent(context, WidgetService.class); 
     intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
     widget = new RemoteViews(context.getPackageName(), R.layout.widget); 

     SimpleDateFormat dateFormater = new SimpleDateFormat("EEEE"); 
     widget.setTextViewText(R.id.widget_day, dateFormater.format(currentDate.getTime())); 
     dateFormater = new SimpleDateFormat("dd.MM.yyyy"); 
     widget.setTextViewText(R.id.widget_date, dateFormater.format(currentDate.getTime())); 

     //Button-Actions 
     Intent backIntent = new Intent(context, StudyWidgetProvider.class); 
     backIntent.setAction(BUTTON_BACK); 
     Intent forwardIntent = new Intent(context, StudyWidgetProvider.class); 
     forwardIntent.setAction(BUTTON_FORWARD); 
     PendingIntent backPendingIntent = PendingIntent.getBroadcast(context, 0, backIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     PendingIntent forwardPendingIntent = PendingIntent.getBroadcast(context, 0, forwardIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     widget.setOnClickPendingIntent(R.id.widget_but_back, backPendingIntent); 
     widget.setOnClickPendingIntent(R.id.widget_but_forward, forwardPendingIntent); 

     widget.setRemoteAdapter(appWidgetIds[i], R.id.words, intent); 
     appWidgetManager.updateAppWidget(appWidgetIds[i], widget); 
    } 

    super.onUpdate(context, appWidgetManager, appWidgetIds); 
} 

@Override 
public void onReceive(Context context, Intent intent) { 
    super.onReceive(context, intent); 

    String action = intent.getAction(); 
    if(action.equals(BUTTON_BACK)){ 
     Log.i(LOG_TAG, "Pressed back"); 
     currentDate.set(Calendar.DATE, -1); 
    } 
    if(action.equals(BUTTON_FORWARD)){ 
     Log.i(LOG_TAG, "Pressed forward"); 
     currentDate.set(Calendar.DATE, 1); 
    } 

    Bundle extras = intent.getExtras(); 
    if(extras != null){ 
     Log.i(LOG_TAG, "Bundle not null"); 
     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
     ComponentName thisAppWidget = new ComponentName(context.getPackageName(), StudyWidgetProvider.class.getName()); 
     int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget); 

     onUpdate(context, appWidgetManager, appWidgetIds); 
    } 
} 
} 
+0

你沒有在意圖中加入任何附加元素,那麼你爲什麼期望什麼呢? – 2012-07-22 21:30:01

+0

你是對的。謝謝您的幫助! – iTamp 2012-08-07 17:27:33

+1

@DavidWasser你的意思是添加一個(正式)答案,以便它可以被接受? – larham1 2013-11-21 05:58:24

回答

0

您沒有在意圖中添加任何附加功能,那麼您爲什麼期望什麼呢?