9

Sto cercando da ore come fare esattamente questo:Android notifica al momento

voglio che ogni giorno (tranne il fine settimana) viene inviata una notifica alla volta (diciamo alle 18:00 (18:00 =)) tranne quando l'app è già aperta. È praticamente come l'app di Gmail quando ricevi una mail. Quando l'utente fa clic sulla notifica, dovrebbe scomparire e deve essere portato a MainActivity.

Ho provato numerose cose con AlarmManager, ma nessuna ha provocato la visualizzazione di una notifica.

Il codice ho provato, che mi sembra abbastanza vicino ad essere corretta, è la seguente: Nel mio MainActivity:

AlarmManager alarmManager = (AlarmManager) this.getSystemService(ALARM_SERVICE); 
Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY, 18); 
Intent intent = new Intent(this, NotificationService.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); 
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 

mio NotificationService:

public class NotificationService extends IntentService { 



    public NotificationService() { 
     super("NotificationService"); 
    } 

    @Override 
    @SuppressWarnings("deprecation") 
    protected void onHandleIntent(Intent intent) { 
     NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     Notification notification = new Notification(R.drawable.ic_launcher, "reminder", System.currentTimeMillis()); 
     notification.defaults |= Notification.DEFAULT_SOUND; 
     notification.flags |= Notification.FLAG_AUTO_CANCEL; 
     Intent notificationIntent = new Intent(this, MainActivity.class); 
     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent , 0); 
     notification.setLatestEventInfo(getApplicationContext(), "It's about time", "You should open the app now", contentIntent); 
     nm.notify(1, notification); 
    } 
} 

Avviso Io uso roba deprecato perché questo era anche l'unico modo in cui una notifica si presentava mentre non funzionava con AlarmManager. Se possibile, ti preghiamo di reagire con una soluzione che non contiene elementi deprecati, ma con materiale aggiornato: P.

Molte molte molte grazie in anticipo !!!

Cordiali saluti

risposta

10

Finalmente sono stato in grado di trovare la soluzione:

private void handleNotification() { 
    Intent alarmIntent = new Intent(this, AlarmReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 5000, pendingIntent); 
} 

Questa è mia abitudine BroadcastReceiver:

public class AlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Calendar now = GregorianCalendar.getInstance(); 
     int dayOfWeek = now.get(Calendar.DATE); 
     if(dayOfWeek != 1 && dayOfWeek != 7) { 
      NotificationCompat.Builder mBuilder = 
        new NotificationCompat.Builder(context) 
        .setSmallIcon(R.drawable.ic_launcher) 
        .setContentTitle(context.getResources().getString(R.string.message_box_title)) 
        .setContentText(context.getResources().getString(R.string.message_timesheet_not_up_to_date)); 
      Intent resultIntent = new Intent(context, MainActivity.class); 
      TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
      stackBuilder.addParentStack(MainActivity.class); 
      stackBuilder.addNextIntent(resultIntent); 
      PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
      mBuilder.setContentIntent(resultPendingIntent); 
      NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
      mNotificationManager.notify(1, mBuilder.build()); 
     } 
    } 
} 

E questo nel manifesto nel tag applicazione:

<receiver 
     android:name="be.menis.timesheet.service.AlarmReceiver" 
     android:process=":remote" /> 
+0

cos'è 'android: name = "be.menis.timesheet.service.AlarmReceiver" '?? Desidero impostare la notifica alle 10:00 del giorno – Neo

+0

@ashish che è il nome del pacchetto dell'applicazione e la posizione del ricevitore –

+0

Grazie per il codice, lo sto testando ora. Ma qualcuno sa se imposterò un nuovo allarme ogni volta che eseguirò questo codice? se è così, dovrei stare molto attento con esso ... – George