【发布时间】:2013-12-22 14:19:23
【问题描述】:
我有一个带有 2 个按钮的简单小部件。单击任何小部件按钮应打开相同的活动,但使用不同的参数。一切正常:单击按钮 1 打开一个活动并传递参数 1,单击按钮 2 打开一个活动并传递参数 2。我检查传递的参数:
getIntent().getStringExtra("mode")
当我按下 Android Home 按钮关闭应用程序时,问题就开始了 - 之后应用程序流程无法识别按下了哪个按钮。但是如果我用返回按钮关闭应用程序 - 一切都很好。
我的猜测是,在按下 Home 并单击其中一个小部件按钮后,最新的意图被使用,而不是使用与单击的按钮相对应的意图。
到目前为止我已经尝试过:
- 尝试通过 intent.setAction() 向意图添加操作
- 尝试了所有可能的标志而不是 FLAG_CANCEL_CURRENT
- 尝试过的活动启动模式:单顶单任务。单任务还有其他问题,所以我坚持单顶。
这里是onUpdate代码:
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_home);
Intent intent1 = new Intent(context, MainActivity.class);
intent1.putExtra("mode", "1");
Intent intent2 = new Intent(context, MainActivity.class);
intent2.putExtra("mode", "2");
PendingIntent pendingIntent1 = PendingIntent.getActivity(context, 0,
intent1, PendingIntent.FLAG_CANCEL_CURRENT);
PendingIntent pendingIntent2 = PendingIntent.getActivity(context, 1,
intent2, PendingIntent.FLAG_CANCEL_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.button1, pendingIntent1);
remoteViews.setOnClickPendingIntent(R.id.button2, pendingIntent2);
appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
}
清单:
<receiver
android:name="com.testwidgetbuttons.HomeWidgetProvider"
android:icon="@drawable/ic_launcher"
android:label="Example Widget" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget" />
</receiver>
小部件 xml:
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/widget_home"
android:minHeight="72dp"
android:minWidth="146dp"
android:updatePeriodMillis="1800000" >
</appwidget-provider>
请指教。 谢谢。
【问题讨论】:
标签: android android-intent android-widget android-homebutton