Intereting Posts
Уникальный серийный номер Android Есть ли библиотека для плавающих кнопок действия (FAB) с ярлыками? Gradle second build не работает после изменения styles.xml Начать действие с экрана предпочтений (намерение определено в файле xml) Как иметь несколько экземпляров службы на Android Как подключить файл изображения по электронной почте? В чем разница между URI и классом Uri Android: макет с закругленной тенью Каков наиболее эффективный с точки зрения батареи подход использования LocalClient для периодического получения обновлений? Как заблокировать диалог оповещения о закрытии кнопки «Назад» Как удалить приложение Android из командной строки на устройстве У Android-устройств есть статический IP-адрес? Использование «android: textAppearance» в TextView / EditText завершается с ошибкой, но «стиль» работает Android: правильный способ использования onBackPressed () с помощью Toast Запустить приложение Android из SMS / MMS-сообщения?

Уведомление по Android

Сейчас я ищу часы, как это сделать:

Я хочу, чтобы каждый день (кроме выходных) уведомление отправлялось одновременно (скажем, 18:00 (= 6 вечера)), за исключением того, когда приложение открыто. Это похоже на приложение gmail, когда вы получаете почту. Когда пользователь нажимает уведомление, он должен исчезнуть и должен быть доставлен в MainActivity.

Я пробовал много вещей с AlarmManager, но ни одно из них не привело к появлению уведомления.

Код, который я пробовал, который, по моему мнению, очень близок к правильности, заключается в следующем: В моей 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); 

Мой 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); } } 

Заметьте, что я использую устаревшие вещи, потому что это был единственный способ уведомления, когда-либо появлявшийся при работе с AlarmManager. Если возможно, ответьте с решением, в котором нет устаревшего материала, но с обновленным материалом: P.

Многое много спасибо заранее!

С наилучшими пожеланиями

Solutions Collecting From Web of "Уведомление по Android"

Наконец, я смог найти решение:

 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); } 

Это мой пользовательский 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()); } } } 

И это в манифесте в теге приложения:

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