Android多按钮小部件:按Android Home刹车小部件按钮识别

时间:2013-12-22 14:19:23

标签: android android-intent android-widget android-homebutton

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

getIntent().getStringExtra("mode")

当我按Android 主页按钮关闭应用程序时问题就开始了 - 之后应用程序流程无法识别按下了什么按钮。但如果我用后退按钮关闭应用程序 - 一切都很好。

我的猜测是,在按住主页并单击其中一个小部件按钮后,将使用最近的意图,而不是使用与单击的按钮对应的意图。

到目前为止我尝试过:

  1. 尝试通过intent.setAction()
  2. 向意图添加操作
  3. 尝试了所有可能的标志,而不是FLAG_CANCEL_CURRENT
  4. 尝试过活动启动模式:单个顶级和单个任务。单一任务还有其他问题,所以我坚持单顶。
  5. 这是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> 
    

    请指教。 感谢。

1 个答案:

答案 0 :(得分:1)

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

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

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