如何在android中中止BroadcastReceiver

Ahm*_*asi 8 android broadcastreceiver android-pendingintent smsmanager

我正在制作一个短信计划应用程序,它只需要用户的时间,短信和号码,并在给定时间发送短信.我在用PendingIntent.这是我的示例代码.

当用户创建计划时,它只是调用此方法.

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);
    }
Run Code Online (Sandbox Code Playgroud)

这是'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();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

我的问题是:当用户编辑时间表时,如何取消该广播并发送新广播?由于可以有多个时间表,如何找到更改/中止的特殊情况?

Com*_*are 10

当用户编辑时间表时,如何取消该广播并发送新广播?

cancel()使用AlarmManagerPendingIntent您用于设置计划的等效内容相同的呼叫:

Intent intent = new Intent(this, SMSBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

alarmManager.cancel(pendingIntent);
Run Code Online (Sandbox Code Playgroud)

由于可以有多个时间表,如何找到特定的更改/中止?

您的实施中只有一个警报.

  • @DawoodAbbasi:为每个(你的`234324243`)使用不同的ID. (4认同)

Ben*_*and 6

如果您有对待处理的Intent的引用,则可以取消 Intent.如果要中止当前广播,可以使用abortBroadcast.

也可以看看:

1)如何获取和取消PendingIntent?

2)停止等待意图

3)中止/取消广播