【问题标题】:Android multi-button widget: pressing Android Home brakes widget buttons identificationAndroid多按钮小部件:按下Android Home刹车小部件按钮识别
【发布时间】:2013-12-22 14:19:23
【问题描述】:

我有一个带有 2 个按钮的简单小部件。单击任何小部件按钮应打开相同的活动,但使用不同的参数。一切正常:单击按钮 1 打开一个活动并传递参数 1,单击按钮 2 打开一个活动并传递参数 2。我检查传递的参数:

getIntent().getStringExtra("mode")

当我按下 Android Home 按钮关闭应用程序时,问题就开始了 - 之后应用程序流程无法识别按下了哪个按钮。但是如果我用返回按钮关闭应用程序 - 一切都很好。

我的猜测是,在按下 Home 并单击其中一个小部件按钮后,最新的意图被使用,而不是使用与单击的按钮相对应的意图。

到目前为止我已经尝试过:

  1. 尝试通过 intent.setAction() 向意图添加操作
  2. 尝试了所有可能的标志而不是 FLAG_CANCEL_CURRENT
  3. 尝试过的活动启动模式:单顶单任务。单任务还有其他问题,所以我坚持单顶。

这里是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


    【解决方案1】:

    由于当您按下主页按钮时您的 Activity 仍在运行,因此不会通过您的 Activity 的 onCreate() 方法读取启动 MainActivity 的意图。

    As described here,将新意图传递到现有活动实例时,请改用Activity.onNewIntent()

    如果您希望完成并重新创建任何先前的实例,您可能需要在您的意图中指定 FLAG_ACTIVITY_CLEAR_TOP launch flag

    【讨论】:

    • Paul,您的两点没有单独工作,但更新它们(onNewIntent 和 flag clear top)确实有效。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多