我有一个带有2个按钮的简单小部件。单击任何窗口小部件按钮应该打开相同的活动,但使用不同的参数。一切正常:单击按钮1打开一个活动并传递参数1,单击按钮2打开一个活动并传递参数2.我检查传递的参数:
getIntent().getStringExtra("mode")
当我按Android 主页按钮关闭应用程序时问题就开始了 - 之后应用程序流程无法识别按下了什么按钮。但如果我用后退按钮关闭应用程序 - 一切都很好。
我的猜测是,在按住主页并单击其中一个小部件按钮后,将使用最近的意图,而不是使用与单击的按钮对应的意图。
到目前为止我尝试过:
这是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>
Widget 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>
请指教。 感谢。
答案 0 :(得分:1)
由于当您按下主页按钮时您的活动仍在运行,因此未通过您的活动的onCreate()
方法读取启动MainActivity的意图。
As described here,在将新意图传递到现有活动实例时,请使用Activity.onNewIntent()
。
如果您希望完成并重新创建任何先前的实例,则可能需要将FLAG_ACTIVITY_CLEAR_TOP launch flag指定为您的意图。