Как иметь более одного экземпляра одной и той же трансляции одновременно

Я застрял на 3 дня, или то, что я хочу сделать, является невероятно простым или невероятно сложным, потому что я не могу найти ответ где-нибудь. У меня есть BroadcastReceiver и кнопка, которая отправляет намерение начать эту трансляцию, каждый раз, когда я нажимаю кнопку, она отправляет разные данные (int++), у таймера есть таймер 10 м, поэтому у меня две проблемы:

1: для отправки данных мне нужно использовать sendBroadcast(intent) но чтобы установить таймер, я должен использовать AlarmManager, и просто помещая данные в намерение и намерение в AlarmManager, он всегда отправляет первые вставленные данные, как это исправить?

2: я хочу иметь более одного экземпляра одного и того же BroadcastReceiver с подсчетом сигналов тревоги одновременно, не мешая друг другу. Пример случая: пользователь создает 1 сигнал тревоги, а через 5 минут он создает еще один, происходит то, что только один сигнал тревоги срабатывает через 10 минут после того, как он установил второй, переопределив первый, предполагаемый результат - выполнить первый сигнал тревоги через 10 минут после того, как он установил 1-й и выполнить 2-й после того, как он установил 2-й, как мне этого добиться?

Мой широковещательный приемник:

public class Broadcast_RemoveClass extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            int i = intent.getExtras().getInt("mInt");
            Toast.makeText(context, "done"+i, Toast.LENGTH_LONG).show();
        }
    }

Отправка намерения внутри onClick:

public void startAlert(int i) {
    Intent intent = new Intent(getActivity(), Broadcast_RemoveClass.class);
    Bundle bd = new Bundle();
    bd.putInt("mInt", i);
    intent.putExtras(bd);
    // getActivity().sendBroadcast(intent);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity().getApplicationContext(), 0, intent, 0);
    AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000 * 60 * 10, pendingIntent);
    Toast.makeText(getActivity(), "countdown started " ,Toast.LENGTH_SHORT).show();
}

Ребята помогите пожалуйста, даже если это только к одному из вопросов

1 ответ

Решение

Когда вы делаете:

PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity().getApplicationContext(), 0, intent, 0);

первый 0 действует как идентификатор для этого ожидающего намерения. Таким образом, вы можете отменить или обновить его в будущем. Если вы отправляете в систему другое ожидающее намерение с тем же идентификатором (и соответствующим флагом), оно заменяет предыдущее. Так что опубликуйте свое новое ожидающее намерение, используя другой идентификатор. Вы используете жестко закодированный 0 для всех случаев....

Это поведение также контролируется флагом, установленным в конце. Вы установили это значение равным 0. Это бессмысленно... В классе PendingIntent с нулевым значением нет открытого статического конечного поля. Никогда не используйте жестко закодированные значения для флагов. Даже если они имеют действительное значение, они делают ваш код очень запутанным. Замените 0 в конце соответствующим флагом в зависимости от того, что вы хотите сделать. Доступные флаги в классе PendingIntent:

int FLAG_CANCEL_CURRENT
Flag indicating that if the described PendingIntent already exists, the current one should be canceled before generating a new one.
int FLAG_IMMUTABLE
Flag indicating that the created PendingIntent should be immutable.
int FLAG_NO_CREATE
Flag indicating that if the described PendingIntent does not already exist, then simply return null instead of creating it.
int FLAG_ONE_SHOT
Flag indicating that this PendingIntent can be used only once.
int FLAG_UPDATE_CURRENT
Flag indicating that if the described PendingIntent already exists, then keep it but replace its extra data with what is in this new Intent.

Вам не нужен второй экземпляр приемника вещания. Один и тот же приемник вещания может справиться с любыми желаниями.

Другие вопросы по тегам