OnClick вместе с AlarmManager в виджете не будет работать для меня - PullRequest
0 голосов
/ 07 октября 2011

У меня есть виджет, который я обновляю с помощью AlarmManager, и он отлично работает.

Теперь я хотел бы добавить событие onClick. Моя проблема в том, что я никогда не запускаю onClick? Или, по крайней мере, с моим onRecive.

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// TODO Auto-generated method stub
 super.onUpdate(context, appWidgetManager, appWidgetIds);

 final int N = appWidgetIds.length;
      for (int i=0; i<N; i++) {
          int appWidgetId = appWidgetIds[i];
          updateAppWidget(context, appWidgetManager, appWidgetId);

          //Toast.makeText(context, "onUpdate(): " + String.valueOf(i) + " : " + String.valueOf(appWidgetId), Toast.LENGTH_LONG).show();
      }

}

public static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId){
.
.
.
RemoteViews updateViews = new RemoteViews(context.getPackageName(),R.layout.widget_layout);

updateViews.setTextViewText(R.id.widgettext, "[" + String.valueOf(appWidgetId) + "]" + strWidgetText);


Intent intent = new Intent(context, MyWidgetProvider.class);
intent.setAction(MY_WIDGET_CLICK);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,1, intent, 0);

updateViews.setOnClickPendingIntent(R.id.toggle_button_widget, pendingIntent);  
appWidgetManager.updateAppWidget(appWidgetId, updateViews);

А мой onRecive выглядит так

public void onReceive(Context context, Intent intent) {
 // TODO Auto-generated method stub
 super.onReceive(context, intent);

 if(MY_WIDGET_UPDATE.equals(intent.getAction())){

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

    onUpdate(context, appWidgetManager, appWidgetIds);
   } else if (MY_WIDGET_CLICK.equals(intent.getAction())) {
       Toast.makeText(context, "onClick()", Toast.LENGTH_LONG).show();
   }

 Toast.makeText(context, "onReceiver()" + intent.getAction(), Toast.LENGTH_LONG).show();
 }
}

Как вы видите, у меня есть тост, так что сигнал тревоги сработал, и я получаю только MY_WIDGET_UPDATE как действие

и манифест

        <receiver android:name="company.se.MyWidgetProvider" android:label="News Nobwidget">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                            </intent-filter>

            <intent-filter>
                <action android:name="MY_OWN_WIDGET_UPDATE" />
                <action android:name="MY_OWN_WIDGET_ONCLICK" />
            </intent-filter>

            <meta-data android:name="android.appwidget.provider"
                android:resource="@xml/widget_info" />
        </receiver>

        <activity android:name="company.se.HelloWidgetConfig" android:label="Hello Widget Config">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
            </intent-filter>
        </activity>


    </application>
    <uses-sdk android:minSdkVersion="10" />

</manifest>

Я новичок в Android, поэтому любая помощь приветствуется;)

Полагаю, это мой манифест, который фильтрует событие onClick. Кто-нибудь знает, видите ли вы, какие события запускаются через отладчик Eclipse?

/ Олл

1 Ответ

0 голосов
/ 13 октября 2011

Глупый я!

Ошибка найдена, Android ничего не мог сделать, кроме плохого программирования.

У меня было другое, если (MY_WIDGET_CLICK.equals (intent.getAction ()) вложено с if (extras! = null) вместо if (MY_WIDGET_UPDATE.equals (intent.getAction ()))

Так что остальная часть кода работает! Надеюсь, я никого не запутал.

/ Олл

...