Intereting Posts
Получить изображение с камеры в ImageView Android Получить тег реферера Google Analytics Android Android может использовать неправильный файл макета для однонаправленных действий Откройте приложение Twitter из другого приложения и загрузите страницу Небезопасная реализация интерфейса X509TrustManager – Службы Google Play Организация ресурсов для проекта Android в нескольких пакетах Android webview, запускайте действие ACTION_VIEW, когда URL-адрес не может обрабатываться webview Adb и несколько устройств одновременно Android: версия для консолей Google для разработчиков Обнаруживать, если указанный url – это изображение в Android? Невозможно скомпилировать проект в студии Android. Gradle: недопустимый символ: 'switch' ModelCache.computeIfAbsent не должен быть нулевым Сбой карты Google с помощью ресурсов $ NotFoundException при замене в FrameLayout Ссылки Android WebView на одно и то же окно с target = _blank, чтобы открыть новое окно Android-эмулятор всегда с 533 МБ внутренней памяти

Обработка более одного нажатия кнопки на 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>