2011-12-28 1 views
4

У меня есть виджет под управлением Android, и я бы хотел, чтобы он обновлялся, когда пользователь нажимает кнопку на виджетах.Android AppWidgetProvider onReceive не нажимает кнопку на кнопке

По какой-то причине метод onReceive никогда не вызывается при нажатии кнопки после установки виджета.

У меня есть OnUpdate метод, как это в моем классе AppWidgetProvider:

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

     super.onUpdate(context, appWidgetManager, appWidgetIds); 

     for (int i = 0; i < appWidgetIds.length; ++i) { 

       final RemoteViews rv = 
new RemoteViews(context.getPackageName(), R.layout.appwidget_provider);  

       final Intent nextIntent = 
new Intent(context, TestAppWidgetProvider.class); 
       nextIntent.setAction(TestAppWidgetProvider.NEXT_ACTION); 
       nextIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); 

       final PendingIntent refreshPendingIntent = 
PendingIntent.getBroadcast(context, 0, 
           nextIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
       rv.setOnClickPendingIntent(R.id.next, refreshPendingIntent); 

       appWidgetManager.updateAppWidget(appWidgetIds[i], rv); 
     } 
} 

И тогда в моем режиме приема у меня есть метод, который выглядит как:

@Override 
public void onReceive(Context ctx, Intent intent) { 

    super.onReceive(ctx, intent); 

    final String action = intent.getAction(); 

    if (action.equals(PREV_ACTION)) { 

     Toast.makeText(ctx, "Previous clicked..", Toast.LENGTH_SHORT).show(); 
    } else if (action.equals(NEXT_ACTION)) { 

     Toast.makeText(ctx, "Next was clicked..", Toast.LENGTH_SHORT) 
       .show(); 
    } 
    else { 
     Toast.makeText(ctx, "Other action..", Toast.LENGTH_SHORT).show(); 
    }   
} 

У меня есть это в моем манифесте файл тоже:

<receiver android:name="com.test.android.widget.TestAppWidgetProvider" > 
     <intent-filter > 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter> 
     <intent-filter > 
      <action android:name="com.test.android.widget.PREV" /> 
     </intent-filter> 
     <intent-filter > 
      <action android:name="com.test.android.widget.NEXT" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.appwidget.provider" 
      android:resource="@xml/appwidget_info" /> 
</receiver> 

После того, как я установил виджет и нажал на следующую кнопку, метод onReceive d никогда не вызывается по какой-то причине ...

ответ

4

Исправлено, оказалось тривиальным.

Это произошло потому, что onReceive даже не вызывался при создании виджета, поэтому прослушиватель событий не был настроен.

Добавлен код, который был в onReceive (установка setOnClickPendingIntent и т. Д.) Функции, которая вызывается, когда активность настройки виджета готова для обновления виджета.

+3

Вы можете поделиться своим решением? –

Смежные вопросы