ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用Android跟踪多个警报

2019-11-01 11:28:00  阅读:191  来源: 互联网

标签:android-alarms alarmmanager android


我需要设置每周重复一次的多个警报,以在用户上某堂课(这是一个学术应用程序)时自动使手机振动,然后在上课结束后重置音量.

我已经创建了警报,但是如果用户禁用了此功能,则必须有一种停用所有警报的方法.我也知道我必须通过向AlarmManager.cancel()方法传递和意图使用相同的参数来执行此操作,但是这里的问题是:

用户可以取消课程并注册课程(但不能直接在应用程序中注册),并且该信息已更新并反映在数据库中,仅保留当前课程.因此,如果我对不再存在的类设置了警报,那么如果我无法复制PendingIntent,该如何取消它?

我在这里看到的一个解决方案是创建一个db表来跟踪当前警报,然后对它们进行完全控制,另一种方法是在更新类列表时取消并重置所有警报,但是这样做很公平.时间,第三个但不太友好的选择是简单地等待用户启动电话,并且在重置警报时,只需设置我需要的警报即可(如果我在此启动行为上有误,请更正).我应该尝试第四种选择吗?如果足够好,可以选择其中一种?

解决方法:

首先,您不需要设置多个警报.只需设置NEXT警报,然后在该警报触发时,设置新的下一个警报.如果重新启动电话,丢失的警报也会很容易再次设置,因为您只需要考虑一个警报.

我使用这个小例程来设置警报. Set参数的值确定警报是设置还是取消.

public static void SetMyAlarm(Context c, long AlarmTime, Boolean Set) {
    Intent intent = new Intent(c, AlarmReceiver.class); // The broadcast receiver that will handle my alarm 

    int UniqueID =8192; // id for this specific alarm, use a different id for each separate alarm

    PendingIntent sender = PendingIntent.getBroadcast(c, UniqueID, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager am = (AlarmManager) c.getSystemService(Context.ALARM_SERVICE);
    if (Set) {
        am.set(AlarmManager.RTC_WAKEUP, AlarmTime, sender);
    } else {
        am.cancel(sender);
    }
}

标签:android-alarms,alarmmanager,android
来源: https://codeday.me/bug/20191101/1983180.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有