在Android Widget上处理多个button
我看到了这个主题,并按照描述实现了IntentService,但是如果我需要更多的一个button呢? 我怎样才能区分button? 我试图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>