Непонятное поведение при запуске нового действия с PendingIntent - PullRequest
3 голосов
/ 17 декабря 2010

Я использую BroadCast Listener для прослушивания статистики входящего телефона, а затем отправляю уведомление вроде этого:

    CharSequence contentTitle = "Contact: " + number;
    CharSequence contentText = "Call From: " + number;
    Intent notificationIntent = new Intent(context, CallHandler.class);

    notificationIntent.putExtra(KEYS.NUMBER, number);
    notificationIntent.putExtra(KEYS.STATE, stat);
    notificationIntent.putExtra(KEYS.NAME, name);
    notificationIntent.putExtra(KEYS.DURATION, duration);
    notificationIntent.putExtra(KEYS.START_TIME, startTime);
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

    notif.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

    notif.flags |= Notification.FLAG_AUTO_CANCEL;

    notificationManager.notify((int) System.currentTimeMillis(), notif);

Поэтому, когда есть несколько вызовов, я ожидаю получить уведомление о нескольких вызовах и когда я нажимаю каждое уведомлениеЯ ожидаю, чтобы начать деятельность с прикрепленными параметрами.Тем не менее, я вижу, что действия, которые начинаются позже, получают намерение предыдущего вызова.

Вот как я смотрю на намерение из Упражнения

        Bundle extras = getIntent().getExtras();
    String number = extras.getString(KEYS.NUMBER);
    // String state = extras.getString(KEYS.STATE);
    long duration = extras.getLong(KEYS.DURATION);

    Date start = getStartDate();
    ((TextView) findViewById(R.id.subject)).setText("");
    ((TextView) findViewById(R.id.start_time)).setText(tf.format(start));
    ((TextView) findViewById(R.id.end_time)).setText(tf
            .format(getEndDate()));
    ((TextView) findViewById(R.id.caller_number)).setText(number);
    ((TextView) findViewById(R.id.notes)).setText(getNotesDefaultContent(
            number, duration, start));

Как мне сохранить намерения отдельно, называя независимой деятельностью?

Ответы [ 3 ]

3 голосов
/ 16 февраля 2011

Попробуйте это:

PendingIntent.getActivity(context, 0 , notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

Обратите внимание на последний параметр метода PendingIntent.getActitity. Если вы хотите знать, какой FLAG вы должны использовать, обратитесь к документам API - [http://developer.android.com/reference/android/app/PendingIntent.html#getActivity(android.content.Context, int, android.content.Intent, int)] [1]

[1]: http://developer.android.com/reference/android/app/PendingIntent.html#getActivity(android.content.Context, int, android.content.Intent, int)

~ Дольф ~

2 голосов
/ 01 марта 2013

Это может быть достигнуто еще проще ... просто overide onNewIntent(Intent intent) метод в классе деятельности и просто добавьте startactivity(intent) внутри него.

1 голос
/ 22 декабря 2010

Хорошо, я думаю, что нашел решение.Хитрость заключается в том, чтобы правильно создать намерение!

Вот мой рабочий код:

    CharSequence contentTitle = "Contact: " + number;
    CharSequence contentText = "Call From: " + number;
    Intent notificationIntent = new Intent(context, CallHandler.class);


    notificationIntent.setAction("com.vantage.vcrm.android.telephony"+System.currentTimeMillis());//unique per contact


    notificationIntent.putExtra(KEYS.NUMBER, number);
    notificationIntent.putExtra(KEYS.STATE, stat);
    notificationIntent.putExtra(KEYS.NAME, name);
    notificationIntent.putExtra(KEYS.DURATION, duration);
    notificationIntent.putExtra(KEYS.START_TIME, startTime);
    PendingIntent contentIntent = PendingIntent.getActivity(context, (int) System.currentTimeMillis(), notificationIntent, 0);

    notif.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

    notif.flags |= Notification.FLAG_AUTO_CANCEL;

    notificationManager.notify((int) System.currentTimeMillis(), notif);

Видите ли, я задаю уникальное действие в своем намерении, выполняя это:

notificationIntent.setAction("com.vantage.vcrm.android.telephony"+System.currentTimeMillis());//unique per contact

Также я отправляю уникальный идентификатор запрашивающего в ожидающем намерении:

PendingIntent.getActivity(context, (int) System.currentTimeMillis(), notificationIntent, 0);

Это решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...