Cancelling a single alarm when you have multiple alarms

荒凉一梦 提交于 2019-12-09 16:04:31

问题


I have used the same pendingIntent to set multiple alarms using different intentId for each. the alarm is working. Now i want to cancel a particular alarm. If i use the cancel() method i would end up cancelling all the alarms. I want only a specific one to be deleted. Also the user should be able to cancel this alarm even during a second or a third launch. As in when i launch it the second time, i won't be having the same pendingIntent object. Would i have to persist the pendingIntent object? If so, how? and how do i cancel a single alarm from multiple alarms?


回答1:


You can do it like this,

In your Pending Intent you can pass a unique ID in place of requestCode

PendingIntent pi = PendingIntent.getBroadcast(context, unique_id, i, 0);

And to cancel you can use the same unique ID to cancel it, using the same Pending Intent.

am.cancel(pi);

For getting more information you can just use StackOverflow or Google, for now I think this answer will do for you. :)




回答2:


Here is a kind of hack to do this with the explanation.

First of all you should create a unique intent for the pending intent. For this purpose you can create a custom data field of the intent for your application. I do this in the following way:

Intent intent = new Intent();
intent.setAction(ExampleAppWidgetProvider.MY_INTENT_ACTION);
Uri data = Uri.withAppendedPath(
                Uri.parse("myapp://myapp/Id/#"),
                String.valueOf(intentId));
intent.setData(data);

In your case intentId will be yours unique identifier of the intent.

Then you create alarmManager notification as usual. To cancel an alarm you should do the following steps. At first you should create an intent as in the previous code sample. Then you create pending intent based on this intent (you also create the same pending intent for alarm). And then you cancel this alarm:

Intent intent = new Intent();
intent.setAction(ExampleAppWidgetProvider.MY_INTENT_ACTION);
Uri data = Uri.withAppendedPath(
                Uri.parse("myapp://myapp/Id/#"),
            String.valueOf(intentId));
intent.setData(data);


PendingIntent pendingIntent = PendingIntent.getBroadcast(
                context, 0, intent,
                PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pendingIntent);


来源:https://stackoverflow.com/questions/8877365/cancelling-a-single-alarm-when-you-have-multiple-alarms

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!