Intereting Posts
Не удалось открыть файл на стороне клиента, попробовав сервер. Ошибка в Android. Inspect Devices не отображается в Chrome Использование методов пользовательских запросов с Android Android: ViewFlipper или ViewPager – Какой вариант лучше? Не удалось получить данные из базы данных Sqlite Автоматическое форматирование кода в Android Studio Можно ли симулировать увеличение скорости прохождения времени в Android? Html.fromHtml (текст) не работает OpenGL ES 3.0. Текстура с плавающей точкой Как я могу оживить изменение цвета панели состояния и панели инструментов (как это делает новое приложение «Календарь») Как переключиться с HttpClient на HttpUrlConnection CoordinatorLayout, AppBarLayout и ToolBar – панель инструментов не прокручивает экран Вертикальный просмотрщик в новейшей библиотеке поддержки Android дает ошибки SimpleDateFormat ParseException: Непревзойденная дата Ошибка Не удалось передать null для выполнения (); Метод AsyncTask в android 4.0

Обработка более одного нажатия кнопки на Android Widget

Я видел эту тему и реализовал IntentService, как описано, но что, если я хочу больше одной кнопки? Как я могу отличить кнопку друг от друга? Я пытаюсь setFlags, но не могу прочитать его по методу onHandleIntent ():

public static class UpdateService extends IntentService { ... @Override public void onHandleIntent(Intent intent) { ComponentName me = new ComponentName(this, ExampleProvider.class); AppWidgetManager manager = AppWidgetManager.getInstance(this); manager.updateAppWidget(me, buildUpdate(this)); } private RemoteViews buildUpdate(Context context) { RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.main_layout); Intent i = new Intent(this, ExampleProvider.class); PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); updateViews.setOnClickPendingIntent(R.id.button_refresh, pi); i = new Intent(this, ExampleProvider.class); pi = PendingIntent.getBroadcast(context, 0, i, 0); updateViews.setOnClickPendingIntent(R.id.button_about, pi); return updateViews; } } 

На этом маленьком фрагменте кода у меня есть два PendingIntent, связанных с setOnClickPendingIntent, могу ли я отличить это намерение от разных действий и обработки? Спасибо за помощь

Это работает, вне класса Widget, который расширяет AppWidgetProvider:

 public class ExampleProvider extends AppWidgetProvider { // our actions for our buttons public static String ACTION_WIDGET_REFRESH = "ActionReceiverRefresh"; public static String ACTION_WIDGET_SETTINGS = "ActionReceiverSettings"; public static String ACTION_WIDGET_ABOUT = "ActionReceiverAbout"; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main_layout); Intent active = new Intent(context, ExampleProvider.class); active.setAction(ACTION_WIDGET_REFRESH); PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0); remoteViews.setOnClickPendingIntent(R.id.button_refresh, actionPendingIntent); active = new Intent(context, ExampleProvider.class); active.setAction(ACTION_WIDGET_SETTINGS); actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0); remoteViews.setOnClickPendingIntent(R.id.button_settings, actionPendingIntent); active = new Intent(context, ExampleProvider.class); active.setAction(ACTION_WIDGET_ABOUT); actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0); remoteViews.setOnClickPendingIntent(R.id.button_about, actionPendingIntent); appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); } @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ACTION_WIDGET_REFRESH)) { Log.i("onReceive", ACTION_WIDGET_REFRESH); } else if (intent.getAction().equals(ACTION_WIDGET_SETTINGS)) { Log.i("onReceive", ACTION_WIDGET_SETTINGS); } else if (intent.getAction().equals(ACTION_WIDGET_ABOUT)) { Log.i("onReceive", ACTION_WIDGET_ABOUT); } else { super.onReceive(context, intent); } } ... 

И AndroidManifest.xml, где мы должны зарегистрировать наши действия:

  <receiver android:name="ExampleProvider"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> <action android:name="org.divenvrsk.widgets.ExampleProvider.ACTION_WIDGET_REFRESH"/> <action android:name="org.divenvrsk.widgets.ExampleProvider.ACTION_WIDGET_SETTINGS"/> <action android:name="org.divenvrsk.widgets.ExampleProvider.ACTION_WIDGET_ABOUT"/> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_info"/> </receiver> </application>