1

Я использовал следующий код в android application до set up Notification(Alarm) используя AlarmManager.Как установить уведомление в приложении Android в определенное время?

public void setAlarm() { 
      Intent intent = new Intent(MainActivity.this, TimeAlarm.class); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, 
      intent, PendingIntent.FLAG_UPDATE_CURRENT); 

      am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 
      (40000), pendingIntent); 
     } 

Или я должен использовать следующий код

Calendar calendar = Calendar.getInstance(); 

     calendar.set(Calendar.MONTH, 3); 
     calendar.set(Calendar.YEAR, 2015); 
     calendar.set(Calendar.DAY_OF_MONTH, 21); 

     calendar.set(Calendar.HOUR_OF_DAY,11); 
     calendar.set(Calendar.MINUTE, 15); 
     calendar.set(Calendar.SECOND, 0); 
     calendar.set(Calendar.AM_PM,Calendar.AM); 

     Intent myIntent = new Intent(MainActivity.this, MyReceiver.class); 
     pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent,0); 

     AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
     alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent); 

Я хочу, чтобы установить (уведомление) сигнал тревоги в это конкретное время: 11:15 21-Марта-2015

Может ли помогите мне это установить?

+1

Почему вы хотите установить повторную тревогу, если '11:15 AM в 21 марта 2015 года 'приходит только один раз в календаре? – Apurva

+0

@Apurva aha на самом деле не повторяет тревогу. Мне нужно только одно уведомление, пожалуйста, исправьте меня, если я использую неправильный код? хотите установить уведомление один раз только до определенного времени: 11:15 утра 21 марта 2015 г. – Neo

+0

@ashish Если секунды равны 0, вы также не можете их установить, и если час меньше 12AM, вы также не можете установить Calendar.AM_PM (просто некоторые оптимизации) –

ответ

3

Прежде всего, необходимо использовать Calendar, чтобы установить дату что-то вроде:

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.MONTH, 3); 
cal.set(Calendar.YEAR, 2015); 
cal.set(Calendar.DAY_OF_MONTH, 15); 

cal.set(Calendar.HOUR_OF_DAY, 11); 
cal.set(Calendar.MINUTE, 15); 

А потом в методе setAlarm() вам нужно установить сигнализацию только один раз. Вам не нужно повторять это так:

public void setAlarm() { 
    Intent intent = new Intent(MainActivity.this, TimeAlarm.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, 
     intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    am.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),pendingIntent); 
} 
1
  1. Использование диспетчера аварийных сигналов с обслуживанием.
  2. Служба представит в файле манифеста.
  3. Пожалуйста, внимательно следуйте ниже.

А. http://nnish.com/2014/12/16/scheduled-notifications-in-android-using-alarm-manager/

B. http://androidideasblog.blogspot.co.uk/2011/07/alarmmanager-and-notificationmanager.html

C. https://github.com/benbahrenburg/benCoding.AlarmManager D. http://www.banane.com/2014/05/07/simple-example-of-scheduled-self-clearing-android-notifications/

Я надеюсь, что это поможет вам.

1

Выполнить одну нить каждый второй и сравнить заданное время с текущим временем, и если матчи установить уведомление.

SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm aa"); 
String dateTimeinSrting = "21-Mar-2015 11:15 am"; 

try { 
    Date dateTime = formatter.parse(dateTimeInString); 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 

float dateTimeInMillis = dateTime.getTime(); 

handler = new Handler(); 

final Runnable r = new Runnable() { 
    public void run() { 

     Calendar calendar; 

     if(Float.compare(dateTimeInMillis, calendar.getTimeInMillis())){ 
      //Set the notification here 
     } 

     handler.postDelayed(this, 1000); 
    } 
}; 

handler.postDelayed(r, 1000);