Android设备重新启动检查指定的报警时间是否已过
我需要你的帮助。我被这个问题困住了。警报正常工作。但是,当设备重新启动时,db中存储的指定时间是过去(下午3点),而当前时间是下午4点,如何检查以防止立即触发警报 说: 如果规定的触发时间已过,则会立即触发报警。 以下是我迄今为止所尝试的:Android设备重新启动检查指定的报警时间是否已过,android,alarmmanager,android-alarms,Android,Alarmmanager,Android Alarms,我需要你的帮助。我被这个问题困住了。警报正常工作。但是,当设备重新启动时,db中存储的指定时间是过去(下午3点),而当前时间是下午4点,如何检查以防止立即触发警报 说: 如果规定的触发时间已过,则会立即触发报警。 以下是我迄今为止所尝试的: class DeviceBootReceiver扩展了BroadcastReceiver{ @凌驾 公共void onReceive(上下文、意图){ //检查是否成功重新启动 if(intent.getAction().equals(“android.in
class DeviceBootReceiver扩展了BroadcastReceiver{
@凌驾
公共void onReceive(上下文、意图){
//检查是否成功重新启动
if(intent.getAction().equals(“android.intent.action.BOOT_COMPLETED”)){
SharedReferences shared=context.getSharedReferences(Constants.PREF_NAME,context.MODE_PRIVATE);
//检查是否启用了每日通知
//如果是,请调用NotificationPublisher与NotificationAlarmService通信
if(shared.getBoolean(Constants.KEY_是_DAILY_通知的,false)){
DBHelper DBHelper=新的DBHelper(上下文);
DBConnector.dbConnect(dbHelper);
int DAILY_NOTIFICATION_ID=常量。DAILY_VERSE_NOTIFICATION_1_ID;
ArrayList notificationList=dbHelper.getNotifications();
Log.e(“,”notificationList:“+notificationList.size());
用于(通知对象:通知列表){
日历日期时间=Calendar.getInstance();
datetime.set(Calendar.HOUR\u OF_DAY,obj.getHourOfDay());
datetime.set(Calendar.MINUTE,obj.getMinute());
datetime.set(日历秒,0);
Calendar now=Calendar.getInstance();
如果(现在,在(日期时间)之后){
datetime.add(Calendar.DATE,now.get(Calendar.DATE)+1);
}
Log.e(“启动接收器”,“+obj.getHourOfDay()+”:“+obj.getMinute());
Intent myIntent=newintent(上下文,NotificationPublisher.class);
PendingEvent PendingEvent=PendingEvent.getBroadcast(上下文,
每日通知\u ID++,
myIntent、PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager AlarmManager=(AlarmManager)context.getSystemService(context.ALARM\u服务);
alarmManager.setRepeating(alarmManager.RTC_唤醒,
datetime.getTimeInMillis(),AlarmManager.INTERVAL\u DAY,
悬挂式);
}
}
}
}
AndroidManifest:
<receiver
android:name=".utils.DeviceBootReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
我的代码似乎有什么问题?如果您能提供帮助,我将不胜感激。谢谢!一个示例代码,用于设置间隔日的重复报警
public class MainActivity extends AppCompatActivity {
private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 15);
calendar.set(Calendar.MINUTE, 30);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, alarmIntent);
}
}
public class SampleBootReceiver extends BroadcastReceiver {
private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent1 = new Intent(context, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent1, 0);
Calendar now = Calendar.getInstance();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 15);
calendar.set(Calendar.MINUTE, 30);
if (calendar.before(now))
calendar.add(Calendar.DAY_OF_MONTH, 1);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, alarmIntent);
}
}
}
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "I'm running", Toast.LENGTH_SHORT).show();
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
我希望您运行上述代码并检查BootCompleted输出。我这样设置并检查报警时间,现在它对我有效:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour());
calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute());
Calendar now = Calendar.getInstance();
now.setTimeInMillis(System.currentTimeMillis());
if (calendar.before(now))
calendar.add(Calendar.DAY_OF_MONTH, 1);
我将尝试这一个bro。如果它晚于当前时间如何?它总是无法在指定时间(下午5点)相对于当前时间(下午4点)发出警报@贝蒂·巴恩斯:当您重新启动设备时,应用程序中设置的报警将被丢弃。重新启动后,如果报警时间晚于当前时间,则会设置报警,否则会触发报警。@bEtTyBarnes:der you go我已经添加了代码片段。@kevz Calendar.DATE和Calendar.DAY\u OF\u MONTH都是相同的。@Pankaj Kumar:同意:)
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".AlarmReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
<receiver android:name=".SampleBootReceiver"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
</manifest>
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour());
calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute());
Calendar now = Calendar.getInstance();
now.setTimeInMillis(System.currentTimeMillis());
if (calendar.before(now))
calendar.add(Calendar.DAY_OF_MONTH, 1);