如何在android中中止BroadcastReceiver
我正在做一个短信时间表应用程序,它将只需要从用户的时间,短信和号码,并在给定的时间发送这条短信。我正在使用如何在android中中止BroadcastReceiver,android,broadcastreceiver,android-pendingintent,smsmanager,Android,Broadcastreceiver,Android Pendingintent,Smsmanager,我正在做一个短信时间表应用程序,它将只需要从用户的时间,短信和号码,并在给定的时间发送这条短信。我正在使用pendingent。这是我的示例代码 当用户创建计划时,它只调用此方法 private void SendMessages() { Intent intent = new Intent(this, SMSBroadcastReceiver.class); PendingIntent pendingIntent = PendingIntent.getB
pendingent
。这是我的示例代码
当用户创建计划时,它只调用此方法
private void SendMessages()
{
Intent intent = new Intent(this, SMSBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
this.getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, Timemilli, pendingIntent);
}
这是“SMSBroadcastReceiver.java”文件
public class SMSBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Toast.makeText(context, "SMS Sent !!!!.", Toast.LENGTH_LONG)
.show();
// //Sms Sending
try
{
SmsManager smsManager = SmsManager.getDefault();
for (int i = 0; i < SMSScheduleContactsActivity.SelectedContacts.length; i++)
{
smsManager.sendTextMessage(
SMSScheduleContactsActivity.SelectedContacts[i], null,
AddNewSmsSchedule.Message, null, null);
}
Log.d("testllllllllllllllll", "Message Sent");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
公共类SMSBroadcastReceiver扩展广播接收器
{
@凌驾
公共void onReceive(上下文、意图)
{
Toast.makeText(上下文,“SMS已发送!!”,Toast.LENGTH\u LONG)
.show();
////短信发送
尝试
{
SmsManager SmsManager=smsmsmanager.getDefault();
对于(int i=0;i
我的问题是:当用户编辑日程安排时,我如何取消该广播并发送新的广播???由于可能有多个计划,如何找到要更改/中止的特定计划???如果您有一个对挂起的意图的引用,那么您可以更改该意图。如果要中止当前广播,可以使用 另见: (一) (二) (三) 当用户编辑时间表时,我如何取消该广播并发送新的广播 在
AlarmManager
上调用cancel()
,使用与您用于设置计划的pendingEvent
等效的
Intent intent = new Intent(this, SMSBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
由于可能有多个计划,如何找到要更改/中止的特定计划
您的实现中只有一个警报。
- 公共最终无效中止广播()
在API级别1中添加
设置指示此接收器应中止当前广播的标志;仅适用于通过Context.sendOrderedBroadcast发送的广播。这将阻止任何其他广播接收器接收广播。它仍将调用Context.sendOrderedBroadcast的调用方传入的BroadcastReceiver的onReceive(Context,Intent)
此方法不适用于非有序广播,例如使用Context.sendBroadcast发送的广播。如果您只是更改Timemilli
,则可以再次调用sendMessage()
函数
alarmManager.set(AlarmManager.RTC_WAKEUP, Timemilli, pendingIntent);
只要PendingEvent相同,AlarmManager.set()函数将自动取消上一个报警;它不必是相同的实例,但需要根据意图进行“匹配”。filterEquals():
由于这种行为,为了检索PendingEvent,了解两个意图何时被认为是相同的非常重要。人们常犯的一个错误是创建多个PendingEvent对象,其意图仅在“额外”内容上有所不同,期望每次都获得不同的PendingEvent。这种情况不会发生。用于匹配的Intent部分与Intent.filterEquals定义的部分相同。如果根据Intent.filterEquals使用两个等效的Intent对象,则两个对象将获得相同的PendingIntent
,long,android.app.pendingent)
http://developer.android.com/reference/android/content/Intent.html#filterEquals(android.content.Intent)我必须中止任何挂起的意图,而不仅仅是我在问题中提到的当前意图。也许你应该保留对你所做的每个新挂起意图的引用,然后如果你发现以后需要取消它,您可以迭代您的挂起意图并使用上述取消方法。但是,如果我要添加多个报警,该怎么办???@Dawoodabasi:为每个报警使用不同的ID(您的2343243
)。很容易对其进行组织,以便在任何时候只有一个报警处于活动状态。请尝试根据所需的传递时间对所有挂起报警进行排序,那就安排最近的一个吧。当警报响起时,查看您的列表(是否保留在数据库中?)并再次选择最近的一个。