Androids AlarmManager не будет вызывать тревогу

у меня есть приложение с системой сигнализации, которая работает безупречно, и я копирую все 5 классов и просто меняю имя базы данных, но оно не работает, я могу передать вам весь код, но я хочу услышать, было ли у кого-нибудь что-то вроде это раньше.

когда я вызываю новый ReminderManager(this).setReminder(mRowId,mCalendar);

идентификатор строки заполнен (некоторое число) и mCalendar (имеет дату, которую я сравниваю с датой из Mcalendar другого приложения, которое у меня есть, и это тот же формат), и когда я вызываю это, все идет так, как должно, он создает ожидаемое намерение

public void  setReminder(Long taskId, Calendar when)
{
    Intent i= new Intent(mContext,OnAlarmReciver.class);
    i.putExtra(DatabaseIN.KEY_ROWID,(long)taskId);


    PendingIntent pi=PendingIntent.getBroadcast(mContext,0, i, PendingIntent.FLAG_ONE_SHOT);
    mAlarmManager.set(AlarmManager.RTC_WAKEUP,when.getTimeInMillis(),pi);

}
after this nothing happens... can anyone help

person Tony    schedule 08.03.2012    source источник


Ответы (3)


Попробуйте очистить ваш проект-> очистить, и если это не поможет, создайте новый проект и начните заново писать классы ... это сработало для меня: D

person denza    schedule 11.03.2012

Возможно, when еще не произошло (слишком далеко в будущем) или уже произошло (было в прошлом до вашего вызова set()).

Или, возможно, вы не определили OnAlarmReceiver в своем манифесте.

person CommonsWare    schedule 08.03.2012
comment
у меня это ‹активность android:label=@string/app_name android:name=.OnAlarmReciver /› ‹activity - person Tony; 09.03.2012

PendingIntent.getBroadcast будет повторно использовать соответствующий pendingIntent, поэтому, возможно, он уже запустил это ожидающее намерение (например, возможно, из кода, из которого вы его скопировали), и, поскольку вы используете флаг FLAG_ONE_SHOT, он сработает только один раз.

Быстрый тест — удалить флаг FLAG_ONE_SHOT и посмотреть, срабатывает ли он. Если это проблема, просто используйте другой код запроса в PendingIntent.getBroadcast.

person dule    schedule 08.03.2012
comment
что мне поставить вместо FLAG_ONE_SHOT? - person Tony; 09.03.2012
comment
Это зависит от того, чего вы пытаетесь достичь. Если вы хотите активировать намерение только один раз, вы все равно можете использовать флаг, но код запроса должен быть разным для разных намерений (сейчас вы используете 0, возможно, для более чем одного сигнала тревоги). Если вам на самом деле не нужен FLAG_ONE_SHOT, не используйте флаг (т. е. передайте ему 0). - person dule; 12.03.2012