2016-01-04 2 views
-1

Я начинаю разрабатывать Android-приложение. Теперь я хочу установить алимент уведомлений в своем приложении. У меня есть определенные даты, и я хочу получить уведомление в эти даты в определенное время. Как я могу это сделать? Заранее спасибоУстановить уведомление для конкретной даты и времени

+1

Добро пожаловать к переполнению стека! Для некоторых советов о том, как задавать вопросы, см. Http://stackoverflow.com/help/on-topic. Есть ли конкретная проблема, с которой вы столкнулись? Не могли бы вы поделиться некоторыми из кода, который у вас есть прямо сейчас? – Onots

ответ

3

используйте класс AlarmManager, который запускает код в фоновом режиме. поместить этот код в основной деятельности:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your layout); 
    boolean alarm = (PendingIntent.getBroadcast(this, 0, new Intent("ALARM"), PendingIntent.FLAG_NO_CREATE) == null); 

    if(alarm){ 
     Intent itAlarm = new Intent("ALARM"); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0,itAlarm,0); 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     calendar.add(Calendar.SECOND, 3); 
     AlarmManager alarme = (AlarmManager) getSystemService(ALARM_SERVICE); 
     alarme.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),60000, pendingIntent); 
    } 
} 

создать новый класс, который будет контролировать, если он находится в час уведомить.

public class BroadcastManager extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    try { 
     String yourDate = "04/01/2016"; 
     String yourHour = "16:45:23"; 
     Date d = new Date(); 
     DateFormat date = new SimpleDateFormat("dd/MM/yyyy"); 
     DateFormat hour = new SimpleDateFormat("HH:mm:ss"); 
     if (date.equals(yourDate) && hour.equals(yourHour)){ 
      Intent it = new Intent(context, MainActivity.class); 
      createNotification(context, it, "new mensage", "body!", "this is a mensage"); 
     } 
    }catch (Exception e){ 
     Log.i("date","error == "+e.getMessage()); 
    } 
} 


public void createNotification(Context context, Intent intent, CharSequence ticker, CharSequence title, CharSequence descricao){ 
    NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    PendingIntent p = PendingIntent.getActivity(context, 0, intent, 0); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
    builder.setTicker(ticker); 
    builder.setContentTitle(title); 
    builder.setContentText(descricao); 
    builder.setSmallIcon(R.drawable.yourIcon); 
    builder.setContentIntent(p); 
    Notification n = builder.build(); 
    //create the notification 
    n.vibrate = new long[]{150, 300, 150, 400}; 
    n.flags = Notification.FLAG_AUTO_CANCEL; 
    nm.notify(R.drawable.yourIcon, n); 
    //create a vibration 
    try{ 

     Uri som = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     Ringtone toque = RingtoneManager.getRingtone(context, som); 
     toque.play(); 
    } 
    catch(Exception e){} 
} 

в проявленном положить это:

<receiver 
     android:name="BroadcastManager" 
     android:label="BroadcastReceiverAux"> 
     <intent-filter> 
      <action android:name="ALARM" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 

дать такое разрешение:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" 
Смежные вопросы