【问题标题】:How to start an alarm if the mobile is switch off手机关机时如何启动闹钟
【发布时间】:2012-07-06 08:57:01
【问题描述】:

在我的应用程序中,我使用 AlarmManager 类来设置闹钟。为了在手机重启后触发警报,我使用了BroadcastReceiver。一切正常,我的警报会定期触发。现在问题出现在这种情况下:

假设我现在的时间是 2:30 pm,我将闹钟设置在 2:35 pm。之后,我关掉了手机。当我打开手机一个小时后,没有弹出闹钟作为设置闹钟的时间。发生这种情况是因为当前时间超过了我设置闹钟的时间。要解决这个问题我应该怎么做。我已经在AlarmManager 类中发布了设置警报的代码。请帮我解决这个问题

public class AlarmReceiver extends BroadcastReceiver {
    @SuppressWarnings("static-access")
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
            Intent myIntent = new Intent(context, MyAlarmService.class); 
            PendingIntent pendingIntent = PendingIntent.getService(context, i, myIntent, i);                            
            AlarmManager alarmManager = (AlarmManager)context.getSystemService(context.ALARM_SERVICE);
            Calendar calendar = Calendar.getInstance(); 
            calendar.setTimeInMillis(System.currentTimeMillis()); 
            calendar.add(Calendar.MILLISECOND, (int) Utilities.diff(NoteManager.getSingletonObject().getAlarmTime(i)));                 
            alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
        }
    }
}

public static long diff(Date date) {
    long difference = 0;
    try {
        // set current time
        Calendar c = Calendar.getInstance();
        difference = date.getTime() - c.getTimeInMillis();
        if (difference < 0) {
            // if difference is -1 - means alarm time is of previous time then current
            // then firstly change it to +positive and subtract form 86400000 to get exact new time to play alarm
            // 86400000-Total no of milliseconds of 24hr Day
            difference = difference * -1;
            difference = 86400000 - difference; 
        }
    } 
    catch (Exception e) {
        e.printStackTrace();
    }
    return difference;
}

在清单文件中

<receiver android:name=".AlarmReciever">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

【问题讨论】:

  • 我很好奇你是否想过当用户使用任务管理器杀死正在运行的应用程序时的问题。不幸的是,这将停止 AlarmManager。我试图弄清楚如何确保不会发生这种情况。有什么想法吗?
  • 你为什么压制@SuppressWarnings("static-access")而不纠正它们?我还试图弄清楚no alarm is pop-up as the time on which the alarm is set. This is happen because the current time exceed the time on which I set the alarm. 的意思是什么????你的意思是第二天没有警报会“弹出”(响?)?

标签: android


【解决方案1】:

更好的方法是将警报详细信息存储在数据库中,并在启动时通过广播接收器检索它,就像你说你实现了一个一样。一旦通知从数据库中删除详细信息。这样你就可以跟踪你所有的警报。甚至你可以在启动时启动一个服务并执行此操作

【讨论】:

  • 我所做的是将时间保存在savedPreference中并检查它是否小于currentTime,如果是,则触发延迟操作:)
【解决方案2】:

Android 中的闹钟应用也是如此,如果你的手机关机并且有闹钟响起,它会让你的手机开机,响起闹钟并再次进入睡眠状态。

这里是警报应用Git_Alarm app的源链接,你可以下载它,看看它是如何做到的。

如果您在闹钟接收器中执行其他操作,请拨打闹钟。您基本上可以在手机中再次设置警报接收器启动,这是一个可以帮助您的答案Alarm problem if phone is switched off

编辑:- 一个链接被破坏,替换它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多