4

更新: 私の ActivityCentresPage では、正しい意図が得られないようです。通知からインテントを取得するために必要な特別な方法はありますか?

インテントに新しいキーを追加したところ、値があるにもかかわらず、ActivityCentresPAge でそれが null として表示されます。私のアクティビティはどのような意図を持っていますか?

GCM メッセージを処理するようにレシーバーを構築していますが、一部のインテントが機能しません。

これが私のコードです

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 とアクション (for ループ内) の両方がvenue_で始まると、addAction からのインテントが呼び出されます。

ここで私が間違っていることを誰かが見ることができますか?

編集:この行

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

正しい情報を出力するため、2 つの異なるデータ セットがメソッドに渡されます。また、to_load_action がvenue_ で始まらず、for ループのアクションが始まれば、すべて正常に動作します。

4

2 に答える 2

0

各 PendingIntent に新しい ID を与えることで問題を分類しました。問題は、PendingIntent が上書きされる場所にあると思います。

于 2013-09-12T09:37:46.587 に答える