Когда я добавляю свой виджет со страницы виджетов на своем телефоне, он воспроизводит тост-сообщение «Button Clicked». Тост должен отображаться только после нажатия кнопки, и он работает, но он также отображается, когда виджет добавляется на экран.Кнопка Android Widget Click On Добавить
Я предполагаю, что это может иметь отношение к супер, но Я не совсем уверен.
Код:
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
Intent intent = new Intent(context, Provider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
views.setOnClickPendingIntent(R.id.onoffbutton, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (intent.getAction().equals(AppWidgetManager.ACTION_APPWIDGET_UPDATE)) {
Toast.makeText(context, "Button Clicked", Toast.LENGTH_SHORT).show();
System.out.println("Click!");
}
}
EDIT:
public static String BUTTON_CLICK = "android.appwidget.action.BUTTON_CLICK";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
Intent intent = new Intent(context, Provider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
Intent clickIntent = new Intent(context, Provider.class);
clickIntent.setAction(BUTTON_CLICK);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
views.setOnClickPendingIntent(R.id.onoffbutton, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
@Override
public void onReceive(Context context, Intent clickIntent) {
super.onReceive(context, clickIntent);
if (clickIntent.getAction().equals(BUTTON_CLICK)) {
Toast.makeText(context, "Button Clicked", Toast.LENGTH_SHORT).show();
System.out.println("Click!");
}
}
Исправлено, забыл изменить намерение в PendingIntent pendingIntent = PendingIntent.getBroadcast (контекст, 0, намерение, 0); щелкнуть мышью. –
Да, справа. Таким образом, вы сделали отдельную кнопку PendingIntent для кнопки и назначили задержку срабатывания вашего намерения (тот, который вы предоставляете PendingIntent). Поэтому, когда кнопка нажата, это намерение запускается и возвращается в метод onReceive(). Система Intent в Android чрезвычайно мощная – Sam