2017-08-06 61 views
0

工作后,我有一个问题我的告警管理, 我正在与timepickerdialog, 一个报警经理,但我想保持它重新启动后的工作, 我试图添加的Android报警经理不断重启

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

在我的清单中,但是当我重新启动我的设备时,它会立即报警。

这是我的活动代码:

private void alarmManager(Calendar calendarTime,int id) { 

    pendingIntent = PendingIntent.getBroadcast(this, id, intent, pendingIntent.FLAG_UPDATE_CURRENT); 
    if(calendarTime.before(now)) { 
     calendarTime.add(Calendar.DATE,1); 
     manager.setRepeating(AlarmManager.RTC_WAKEUP, calendarTime.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 
     calendarTime.add(Calendar.DATE,-1); 
    } 
    else 
     manager.setRepeating(AlarmManager.RTC_WAKEUP, calendarTime.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 
} 

这是我的接收器代码:

public void onReceive(Context context, Intent intent) { 
     if(intent.getStringExtra("contentTitle")!=null) 
      contentTitle=intent.getStringExtra("contentTitle"); 

     if(intent.getStringExtra("contentText")!=null) 
      contentText =intent.getStringExtra("contentText"); 

     Intent notifiIntent =new Intent(context,Home_Activity.class); 
     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notifiIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

     NotificationCompat.Builder builder=new NotificationCompat.Builder(context); 
     builder.setAutoCancel(true) 
       .setDefaults(Notification.DEFAULT_ALL) 
       .setSmallIcon(R.drawable.tooth_icon) 
       .setContentTitle(contentTitle) 
       .setContentText(contentText) 
       .setContentIntent(pendingIntent) 
       .setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_SOUND); 

     NotificationManager notificationManager=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
     notificationManager.notify(0,builder.build()); 
    } 

这是我的代码,我通过我的时间到报警功能:

protected TimePickerDialog.OnTimeSetListener morningTimePickerListener =new TimePickerDialog.OnTimeSetListener(){ 
     @RequiresApi(api = Build.VERSION_CODES.N) 
     @Override 
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
      m_calendar.setTimeZone(java.util.TimeZone.getTimeZone("GMT+8")); 
      if(hourOfDay>12) 
       hourOfDay-=12; 
      m_calendar.set(Calendar.HOUR_OF_DAY, hourOfDay); 
      m_calendar.set(Calendar.MINUTE, minute); 
      m_calendar.set(Calendar.SECOND, 0); 
      m_calendar.set(Calendar.MILLISECOND, 0); 
      m_time= simpleDateFormat.format(m_calendar.getTime()).trim(); 
      m_alarm.setText("AM "+m_time); 
      view.setCurrentHour(hourOfDay); 
      view.setCurrentMinute(minute); 
      alarmManager(m_calendar,0); 
      morningRef.setValue(m_time); 
      Toast.makeText(Setting_Activity.this,m_calendar.getTime()+"",Toast.LENGTH_LONG).show(); 
     } 
    }; 

如何在重新启动后保留警报管理器? plz

+0

你的代码在哪里传递日历到闹钟功能? –

+0

我编辑我的职务:) – ChienFeng

+0

检查现有的答案: https://stackoverflow.com/questions/20065433/alarm-doesnt-trigger-after-reboot https://stackoverflow.com/questions/17941371/repeating-alarm -manager-后重启 https://stackoverflow.com/questions/12034357/does-alarm-manager-persist-even-after-reboot https://stackoverflow.com/questions/39442607/how-to-reset -alarm-after-reboot-android-studio – dominicoder

回答

0

不要用户Interval.Day。取而代之的是这样的:

Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(new Date().getTime()); 
    calendar.set(Calendar.HOUR_OF_DAY, 0); // MIDNIGHT 12 AM 
    calendar.set(Calendar.MINUTE,00); 
    calendar.set(Calendar.SECOND, 00); 

PendingIntent pi = PendingIntent.getBroadcast(this, alarmType, alarmIntent, 0); 
    alarmManager.setRepeating(
      AlarmManager.RTC_WAKEUP, 
      calendar.getTimeInMillis(), 
      1000 * 60 *60 *24, // EVERY DAY 
      pi); 

这将在每天午夜12:00时触发报警,并且启动后不会立即触发报警。但仅在午夜12点。

+0

它不为我工作:( – ChienFeng

+0

这对我的作品。完美。 什么不起作用? 当你使用这个代码发生了什么? –

+0

你能送我的代码,我可以修复它 –