Come generare una notifica giornaliera alle 8 del mattino nella mia app Android
Ho già affrontato questo problema. Quindi sarei felice di aiutarvi in modo che non perdiate molto tempo come ho fatto io. Cercherò di essere il più semplice e conciso possibile.
- Prendi il servizio Alarm dal sistema.
- Fai un intento pendente, passando la classe broadcast receiver's name.
- Fai un oggetto calendario e imposta l'ora di esso alle 8 del mattino.
- Controlla se l'ora corrente è oltre le 8. Se sì, aggiungi un altro giorno. Se sì, allora aggiungi un altro giorno.
- Chiamare il metodo set repeating della classe AlarmManager.
Codice di esempio per lo stesso:
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmIntent = new Intent(context of current file, AlarmReceiver1.class); // AlarmReceiver1 = ricevitore broadcast
pendingIntent = PendingIntent.getBroadcast( Menu.this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmIntent.setData((Uri.parse("custom://"+System.currentTimeMillis())));
alarmManager.cancel(pendingIntent);
Calendar alarmStartTime = Calendar.getInstance();
Calendar now = Calendar.getInstance();
alarmStartTime.set(Calendar.HOUR_OF_DAY, 8);
alarmStartTime.set(Calendar.MINUTE, 00);
alarmStartTime.set(Calendar.SECOND, 0);
if (now.after(alarmStartTime)) {
Log.d("Hey", "Added a day");
alarmStartTime.add(Calendar.DATE, 1);
}
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
Log.d("Alarm", "Alarms set for everyday 8 am.");
- Vengo alla classe del ricevitore broadcast. Dovete registrare il vostro ricevitore broadcast nel manifesto. Questo ti farà ricevere gli eventi dell'orologio.
- Sovrascrivi il metodo onReceive di questo ricevitore broadcast e fai una notifica lì stesso o fai un servizio di costruzione di notifiche separato e costruisci e visualizza la tua notifica lì.
Il frammento di codice del manifest:
Il frammento di codice del ricevitore broadcast:
public class AlarmReceiver1 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service1 = new Intent(context, NotificationService1.class);
service1.setData((Uri.parse("custom://"+System.currentTimeMillis())));
context.startService(service1);
}
Snippet di codice del servizio di costruzione di notifiche:
public class NotificationService1 extends IntentService{
private NotificationManager notificationManager;
private PendingIntent pendingIntent;
private static int NOTIFICATION_ID = 1;
Notification notification;
@Override
protected void onHandleIntent(Intent intent) {
ontext context = this.getApplicationContext();
notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
Intent mIntent = new Intent(this, Activity to be opened after clicking on the notif);
Bundle bundle = new Bundle();
bundle.putString("test", "test");
mIntent.putExtras(bundle);
pendingIntent = PendingIntent.getActivity(context, 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Resources res = this.getResources();
NotificationCompat.Builder = new NotificationCompat.Builder(this);
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
notification = new NotificationCompat.Builder(this)
.setContentIntent(pendingIntent)
.setSmallIcon(R.drawable.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.ic_launcher))
.setTicker("ticker value")
.setAutoCancel(true)
.setPriority(8)
.setSound(soundUri)
.setContentTitle("Notif title")
.setContentText("Text").build();
notification.flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS;
notification.defaults |= Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE;
notification.ledARGB = 0xFFFFA500;
notification.ledOnMS = 800;
notification.ledOffMS = 1000;
notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(NOTIFICATION_ID, notification);
Log.i("notif", "Notifiche inviate.");
}
}
Ecco fatto. Questo è tutto.
Spero che questo aiuti.