错误的意图得到了使用

时间:2013-09-11 12:04:00

标签: android android-intent

更新:似乎在我的ActivityCentresPage中没有得到正确的意图。我是否需要通过通知获取意图的特殊方式?

我为我的意图添加了一个新密钥,我的ActivityCentresPAge将其显示为null,即使有值。我的活动有什么意图?

我正在构建我的Receiver以处理GCM消息,并且一些Intent无法正常工作。

这是我的代码

private Intent getIntent(String action, JSONObject obj) {
    Intent intent = new Intent(ctx, ActivityMain.class);
    if (action.equals("home")) {
        intent = new Intent(ctx, ActivityMain.class);
    }
    else if (action.equals("view_timetable")) {
        intent = new Intent(ctx, ActivityViewTimetable.class);
    }
    else if (action.equals("invite_friends")) {
        intent = new Intent(ctx, ActivityInviteFriends.class);
    }
    else if (action.startsWith("venue_")) {
        try {
            intent = new Intent(ctx, ActivityCentrePage.class);
            Log.d("FUApp", obj.getString("name"));
            BaseActivity bAct = new BaseActivity();
            intent.putExtra(bAct.ExtraKeyCentreName, obj.getString("name"));
            intent.putExtra(bAct.ExtraKeyCentreDist, "Not Available");
            intent.putExtra(bAct.ExtraKeyCentreJSON, obj.toString());
            intent.putExtra(bAct.ExtraKeyCentrePostcode, "none");
        } catch (JSONException e) {
            Log.e("FUApp", e.getMessage());
        }

    }
    else if (action.equals("")) {
        //intent = new Intent(ctx, .class);
        Toast.makeText(ctx, "Empty", Toast.LENGTH_SHORT).show();
    }
    else
    {
        intent = new Intent(ctx, ActivityMain.class);
    }
    return intent;
}

并且

Intent intent = new Intent(ctx, ActivityMain.class);
    if (to_load_action != null) {
        intent = getIntent(to_load_action, to_load_obj);
    }

    for (int a = 0;a < todo_items.length();a++) {
        JSONObject todo_item = new JSONObject();
        String action = "";
        String miniAction = "";
        try {
            todo_item = todo_items.getJSONObject(a);
            action = todo_item.getString("action");
            miniAction = todo_item.getString("action_title");
        } catch (JSONException e) {
            Log.d("FUApp", e.getMessage());
        }
        Intent intent2 = getIntent(action, todo_item);
        PendingIntent pIntent2 = PendingIntent.getActivity(ctx, 0, intent2, 0);
        mBuilder.addAction(0, miniAction, pIntent2);
    }

    PendingIntent pIntent = PendingIntent.getActivity(ctx, 0, intent, 0);

    mBuilder.setContentIntent(pIntent);

当我点击主通知时,当to_load_action和action(在for循环中)都以venue_开头时,将调用addAction的意图。

有人能看到我错在这里吗?

编辑:这一行

Log.d("FUApp", obj.getString("name"));

输出正确的信息,因此将两个不同的数据集传递给该方法。此外,如果to_load_action不是以venue_开头,并且for循环中的操作没有,那么一切正常。

2 个答案:

答案 0 :(得分:0)

在pendingIntent中

你不应该使用标志吗?

    PendingIntent pIntent2 = PendingIntent.getActivity(ctx, 0, intent2, Intent.FLAG_ACTIVITY_NEW_TASK);

或者

PendingIntent.FLAG_UPDATE_CURRENT

答案 1 :(得分:0)

我通过给每个PendingIntent提供一个新ID来排序问题,我相信问题就在于PendingIntent被覆盖了。