Android-виджет onUpdate () - PullRequest
       20

Android-виджет onUpdate ()

2 голосов
/ 16 февраля 2012

Итак, я разработал Android-виджет, который должен работать как кнопка. Я использовал базовый код, приведенный здесь: http://developer.android.com/guide/topics/appwidgets/index.html Когда кнопка нажата, действие запускается. Это прекрасно работает каждый раз! Однако, когда я регистрирую время нажатия кнопки, я получаю только самый первый раз. Почему это происходит?

Вот код, который меня попросили:

public class ExampleAppWidgetProvider extends AppWidgetProvider {

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    final int N = appWidgetIds.length;

    // Perform this loop procedure for each App Widget that belongs to this provider
    for (int i=0; i<N; i++) {
        int appWidgetId = appWidgetIds[i];
        Log.d("myButton","This is only called once.Why????????")
        // Create an Intent to launch ExampleActivity
        Intent intent = new Intent(context, ExampleActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

        // Get the layout for the App Widget and attach an on-click listener
        // to the button
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout);
        views.setOnClickPendingIntent(R.id.button, pendingIntent);

        // Tell the AppWidgetManager to perform an update on the current app widget
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
}

}

1 Ответ

0 голосов
/ 16 мая 2015

Этот оператор журнала находится в методе onUpdate виджета и будет вызываться только при первоначальном создании виджета и в период его обновления.Чтобы заставить его войти в клик, вы можете сделать одну из двух вещей.

A.поместите оператор журнала в метод onCreate ExampleActivity

B.измените ожидающее намерение обновить AppWidgetProvider с флагом, затем перезаписать метод onReceive, чтобы сделать запись журнала, и затем запустить ExampleActivity, если флаг присутствует.Например:

Intent intent = new Intent(context, ExampleAppWidgetProvider.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.putExtra(SOME_FINAL_STRING, true);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

Затем в методе onReceive:

@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    Bundle extras = intent.getExtras();

    if(AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action) && extras != null && extras.getBoolean(SOME_FINAL_STRING) == true){
        Log.d("myButton","Should no longer be called once!");
        Intent newIntent = new Intent(context, ExampleActivity.class);
        newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(newIntent);
    } else {
        super.onReceive(context, intent);
    }
}
...