2012-04-07 3 views
0

У меня есть приложение «Домашнее задание», которое я хочу создать для напоминания пользователям о домашней работе накануне/в определенное время. У меня есть Activity под названием AddNewHomework, где пользователь создает новый элемент домашней работы и добавляется в базу данных. Затем этот код вызывается.Android AlarmManager - Отмена из другой активности

Intent i = new Intent(this, AlarmNotificationReceiver.class); 
i.putExtra("title", title); 
PendingIntent pi = PendingIntent.getBroadcast(this.getApplicationContext(), (int) id, i, 0); 
AlarmManager mAlarm = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
mAlarm.set(AlarmManager.RTC_WAKEUP, 
System.currentTimeMillis() + 10 * 1000, pi); 

Это создает новый Тревога, которая срабатывает через 10 секунд и создает уведомление.

Моя проблема в том, что у меня есть другое действие, называемое HomeworkList, которое содержит ListView и отображает все домашние задания, хранящиеся в базе данных. Если пользователь долго нажимает на один, то у них есть возможность его удалить, однако удаление его из базы данных не приведет к удалению тревоги.

Я искал код, который я могу использовать для удаления тревоги, однако я не нашел ничего, что позволило мне понять, как отменить будильник из этой различной деятельности. Я знаю, что мне нужно сделать PendingIntent одинаковым, но как это сделать, поскольку я не могу получить доступ к контексту из другого класса. (Я не думаю).

+0

вы попробовали 'mAlarm.cancel (PendingIntent);' для отмены будильника? –

+0

@imrankhan У меня есть, однако мне нужен одинаковый PendingIntent, чтобы найти будильник и отменить его. Моя проблема заключается в создании идентичного PendingIntent's – TomRichardson

ответ

1

Если это помогает, вы можете получить доступ к своему контексту из другого действия, сделав статический getter для текущего контекста. В вашем выше классом, просто сделать частное поле:

private static Context context; 

public static Context getAppContext(){ 
    return MyActivity.context; 
} 

Затем просто добавить в OnCreate метод а:

MyActivity.context = getApplicationContext(); 

Доступ к контексту от другой деятельности, в настоящее время довольно легко. Вы можете использовать контекст, полученный из «MyActivity», чтобы отменить будильник.

+0

Работал отлично, спасибо! – TomRichardson

+0

вы можете объяснить немного больше. Мне понравилось ваше предложение получить доступ к контексту в классе адаптера, но я не добился успеха. вы можете помочь. – Ranjit

+0

вы можете объяснить более подробно, где я могу поместить этот код в оба моих действия (активность для активации тревоги и активности для отмены тревоги)? –

1

В соответствии с этим Android: Does context affect filterEquals(), used to cancel alarm? не имеет значения, используете ли вы разные контексты, это не влияет на распознавание PendingIntent как соответствия. Я подтвердил это в своем приложении, я установил будильник из одного действия, используя активность в качестве контекста, и отменил его из другого действия, используя контекст этого действия, и был успешно отменен (действие не было инициировано).

Смежные вопросы