0

Я хочу, чтобы установить будильник в указанное время и осуществлять уведомление в указанное время (в день), используя BroadcastReceiver и AlaramManager.Как в андроиде в AlaramManger и BroadcastReceiver

Он встревожил указанное время. После того, как я запустил приложение, он снова сигнализирует, даже если это не время, которое я установил.

Другими словами, когда я устанавливаю будильник 9:21 вечера, и я запускаю приложение после 21:21, уведомление создается.

Я просто хочу сделать уведомление о тревоге в указанное время, которое я установил, и приложение не запускается. Кроме того, когда я запускаю приложение, он не сигнализирует.

Как это исправить?

Это мой BroadcastReceiver код -

public class BroadcastD extends BroadcastReceiver{ 
    Context context; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     this.context = context; 

     showNotification(); 

} 

    public void showNotification() { 
     NotificationManager notificationManager = 
       (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     PendingIntent pendingIntent = PendingIntent 
      .getActivity(context, 0, new Intent(context, MainActivity.class), 
        PendingIntent.FLAG_UPDATE_CURRENT); 

     NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
     builder.setSmallIcon(android.R.drawable.ic_dialog_alert) 
      .setTicker("Ticket") 
      .setContentTitle("Title") 
      .setContentText("Context") 
      .setWhen(System.currentTimeMillis()) 
      .setAutoCancel(true) 
      .setContentIntent(pendingIntent); 

     notificationManager.notify(1, builder.build()); 
    } 
} 

Это мой MainActivity код:

public class MainActivity extends AppCompatActivity { 
    AlarmManager am ; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     am = (AlarmManager) getSystemService(ALARM_SERVICE); 

     AlarmHATT alarmHATT = new AlarmHATT(getApplicationContext()); 
     alarmHATT.Alarm(); 
} 
public class AlarmHATT { 
    private Context context; 

    public AlarmHATT(Context context) { 
     this.context = context; 
    } 

    public void Alarm() { 
     Intent intent = new Intent(context.getApplicationContext(), BroadcastD.class); 
     PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); 

     Calendar calendar = Calendar.getInstance(); 

     calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 
       calendar.get(Calendar.DATE), 21, 21, 0); 

     am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000, sender); 
    } 
} 
+0

Это нормальное поведение, которое alarmManager запускает, если вы установите время, которое было в прошлом. Вы не можете избежать, только установив правильное время. – Opiatefuchs

+0

Что еще можно избежать тревоги? Если вы знаете, пожалуйста, научите меня. Спасибо. –

+0

просто не устанавливал время в прошлом. Вопрос в том, ПОЧЕМУ вы хотите установить время из прошлого? Это не имеет смысла, никто не должен уведомляться о прошедшем событии ..... – Opiatefuchs

ответ

-2

Попробуйте ниже кода set alarm на определенное время.

am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 
+0

Я уже пробовал это. Но это тоже так. –

1

Чтобы избежать пожарной сигнализации немедленно, настроить время запуска с Calendar, как это:

Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis()); 

calendar.set(Calendar.HOUR_OF_DAY, 9); 
calendar.set(Calendar.MINUTE, 30); 
calendar.set(Calendar.SECOND, 0); 

А потом, если время вы настраиваете уже прошло сегодня, вам нужно установить календарь на следующий день с:

calendar.add(Calendar.DATE, 1); 

это позволит избежать вашего огня тревоги немедленно, потому что он был установлен в то время, которое уже прошло ранее в тот же день.

Затем продолжайте использовать calendar.getTimeInMillis() в качестве стартового времени.