Avvio di Android che innesca l'avvio dell'applicazione

Sto cercando di far funzionare correttamente il mio servizio di notifica giornaliera ma sono bloccato con un problema.

Vorrei ricevere una notifica solo in un momento specifico della giornata in futuro ma ho notato che

  • Connessione Bluetooth RFCOMM / SDP ad un'adattatore RS232 in android
  • Controllo dello stato di una chiamata in remoto
  • È ansible scrivere un driver per il sistema di input in android
  • Come rendere il mio Android App FullScreen tramite il Manifest di Android?
  • actionBar.setNavigationMode (ActionBar.NAVIGATION_MODE_TABS) deprecato
  • Mappa marker con text in Google Maps Android API v2
  • if (time_that_i_set_for_notification < current_time_of_the_day) notification triggers at the boot of my app 

    Questo è errato perché in quella condizione, la notifica dovrebbe triggersrsi solo il giorno successivo , non nell'istante in cui lancio l'applicazione.

    Ecco il mio tentativo di far funzionare le cose:

    Lo chiamo nel mio metodo MainActivity, onCreate () :

     private void scheduleNotification(int hour, int minute){ Intent notificationIntent = new Intent(this, NotificationReceiver.class); notificationIntent.putExtra("notifId", notifId); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, notifId, notificationIntent, 0); // Set the alarm to start at approximately at a time DatePicker datePicker = new DatePicker(this); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.DAY_OF_MONTH, datePicker.getDayOfMonth()); if(calendar.getTime().compareTo(new Date()) < 0) calendar.add(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.HOUR_OF_DAY, 12); calendar.set(Calendar.MINUTE, 12); AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); // With setInexactRepeating(), you have to use one of the AlarmManager interval // constants--in this case, AlarmManager.INTERVAL_DAY. alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); } 

    Pensavo che aggiungere if(calendar.getTime().compareTo(new Date()) < 0) calendar.add(Calendar.DAY_OF_MONTH, 1); Avrei raggiunto il risultato che avevo bisogno.

    Grazie e buona giornata.

  • android impostare il button di background in modo programmato
  • getItemAtPosition () Come get dati leggibili dall'elemento selezionato in un ListView
  • onActivityResult non viene chiamato quando la list si conclude
  • Quando è chiamato getItem di FragmentPagerAdapter?
  • Come posso modificare la width / lo spessore di una barra di scorrimento?
  • Suonare più suoni utilizzando SoundManager
  • 2 Solutions collect form web for “Avvio di Android che innesca l'avvio dell'applicazione”

    Prima di call setInexactRepeating , aggiungere questo controllo:

     if (calendar.getTimeInMillis() < System.currentTimeMillis()) calendar.setTimeInMillis(calendar.getTimeInMillis() + AlarmManager.INTERVAL_DAY); 

    Spero che questo ti aiuti.

    Ok c'è un controllo errato lì, se lo cambia, dovresti essere in grado di risolvere il tuo problema.

    Eccoci qui:

     Intent notificationIntent = new Intent(this, NotificationReceiver.class); notificationIntent.putExtra("notifId", notifId); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, notifId, notificationIntent, 0); // Set the alarm to start at approximately at a time DatePicker datePicker = new DatePicker(this); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.DAY_OF_MONTH, datePicker.getDayOfMonth()); //if(calendar.getTime().compareTo(new Date()) < 0) calendar.add(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.HOUR_OF_DAY, 14); calendar.set(Calendar.MINUTE, 50); if (calendar.getTimeInMillis() < System.currentTimeMillis()) calendar.setTimeInMillis(calendar.getTimeInMillis() + AlarmManager.INTERVAL_DAY); AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); // With setInexactRepeating(), you have to use one of the AlarmManager interval // constants--in this case, AlarmManager.INTERVAL_DAY. alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 

    Ho commentato //if(calendar.getTime().compareTo(new Date()) < 0) calendar.add(Calendar.DAY_OF_MONTH, 1); perché non dovrebbe essere necessario.

    Fammi sapere se ha funzionato.

    AGGIORNAMENTO : Devi verificare totalmente se il servizio che gestisce la tua notifica giornaliera è elevato consumo o less. Un'applicazione per batteria ad alta drenaggio preoccuperebbe i tuoi utenti.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.