在 Android Widget 上处理多个按钮单击
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2471875/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Processing more than one button click at Android Widget
提问by dive
I saw this topicand implement IntentService as describes, but what if I want more that one button? How can I distinguish button from each other? I'm trying to setFlags, but cannot read it at onHandleIntent() method:
我看到了这个主题并按照描述实现了 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;
}
}
At this little piece of code I have two PendingIntent linked with setOnClickPendingIntent, can I distinguish this intent for different actions and processing? Thanks for help
在这段代码中,我有两个与 setOnClickPendingIntent 链接的 PendingIntent,我可以针对不同的操作和处理区分此意图吗?感谢帮助
回答by dive
That works, out Widget class that extends AppWidgetProvider:
这是有效的,扩展 AppWidgetProvider 的 Widget 类:
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);
}
}
...
And AndroidManifest.xml where we must register our actions:
和 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>