4

我已经设置了闹钟来提醒我在设备打开时它正在工作。但是当我关闭设备并再次打开该提醒警报时,它不起作用。你们能建议我如何解决这个问题吗?

我的代码看起来像这样,

Intent myIntent = new Intent(getApplicationContext(), serviceclass.class);
PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(),
    CONST+id, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

Calendar calender = Calendar.getInstance();
calender.setTimeInMillis(System.currentTimeMillis());
calender.set(Calendar.HOUR_OF_DAY, hours);
calender.set(Calendar.MINUTE, ireminder.getMin());
calender.set(Calendar.SECOND, 0);
calender.set(Calendar.MILLISECOND, 0);  
calender.set(Calendar.DAY_OF_WEEK, day);

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,  

calender.getTimeInMillis(), 7 * AlarmManager.INTERVAL_DAY, pendingIntent);                
4

2 回答 2

5

警报将在重新启动时清除。

你能做的是

  1. 在 db 表中持久化警报信息
  2. 注册REBOOT_COMPLETED-Event
  3. 重新启动时,启动一个后台线程重新注册警报。确保正确计算警报时间。

请参阅 API:“已注册的警报在设备处于睡眠状态时会保留(并且如果在此期间关闭,可以选择唤醒设备),但如果关闭并重新启动,则会被清除。” - http://developer.android.com/reference/android/app/AlarmManager.html

于 2011-05-09T19:12:44.750 回答
1

创建一个 OnBootReceiver 类

public class OnBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        mgr.setRepeating(AlarmManager.RTC_WAKEUP,
        SystemClock.currentThreadTimeMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES,
                    pi); 

    }

}

内部清单

<receiver android:name=".OnBootReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

在您的活动中

sendBroadcast(new Intent(this, OnBootReceiver.class));
于 2015-06-24T07:50:59.460 回答