首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改时间时AlarmManager不会触发

更改时间时AlarmManager不会触发
EN

Stack Overflow用户
提问于 2013-08-16 20:11:26
回答 1查看 943关注 0票数 1

在我的应用程序中,我根据用户的自定义时间向用户显示通知。我在我的主类中触发了alarmmanager,并通过alarmmanagerpendingIntent的形式调用通知service类。

如果用户未更改设备时间均值,alarmmanager将触发,通知service工作正常,我将收到通知。

考虑以下情况:

如果用户将设备时间设置为大于当前时间,则一切正常,通知也正常工作。如果不是,用户将时间设置为小于设备当前时间,则alarmmanager不会触发pendingIntent。所以我无法收到通知。

详述

设备当前时间:上午10点通知时间:上午11点设备时间更改为:上午11点通知:是

设备当前时间:上午10点通知时间:上午9点设备时间更改为:上午9点通知:否

为什么会发生这种情况?

将设备时间更改为小于当前时间不会触发alarm manager。为什么?

如何克服这一点?

EN

回答 1

Stack Overflow用户

发布于 2018-05-10 15:24:36

其中一个选项是将所有设置的警报存储在数据库中,然后创建一个侦听ACTION_TIME_CHANGE操作的BroadcastReceiver。当用户更改时间时,它将被触发。然后创建一个负责重置警报的IntentService。在此服务类中:

读取db并识别所有已传递的警报。取消传递的警报设置第二天的警报您的代码可能如下所示:在清单中:

代码语言:javascript
复制
<uses-permission android:name="android.permission.ACTION_TIME_CHANGE"/>

以及以下活动:

代码语言:javascript
复制
<receiver android:name=".TimeChangedReceiver" android:enabled="true">
 <intent-filter>
     <action android:name="android.intent.action.TIME_SET" />
 </intent-filter>

创建"TimeChangedReceiver“类,其中:

代码语言:javascript
复制
public class TimeChangedReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    if("android.intent.action.TIME_SET".equals(intent.getAction())) {
        Intent i = new Intent(context, RestartAlarmsService.class);
        ComponentName service = context.startService(i);
    }

}

}

创建"RestartAlarmsService“类,其中:

代码语言:javascript
复制
public class RestartAlarmsService extends IntentService {

public RestartAlarmsService() {
    super("RestartAlarmsService");
}

@Override
protected void onHandleIntent(Intent intent) {

    // read db here
    // then cancel passed alarms
    // reset them to next day
}

}

您可以找到许多关于如何使用数据库并在您的代码中实现它的教程。希望我的回答能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18273070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档