2016-09-17 3 views
-5

У меня есть 3 уведомления, теперь у меня есть задача добавлять уведомления каждые 5 минут, как цикл или с функцией, которую я не знаю. Как это можно добавить автоматически уведомление 4-5-6-7-8 -...... каждые 5 мин.Как добавлять уведомления автоматически?

Основная деятельность ..!

public class MainActivity extends AppCompatActivity { 


Button button; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    button = (Button) findViewById(R.id.btn1); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final Calendar calendar = Calendar.getInstance(); 

      Intent intent = new Intent(getApplicationContext(), AlertReceiver.class); 


      final PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 100, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
      final PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getApplicationContext(), 101, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
      final PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getApplicationContext(), 102, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

      final AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
      final AlarmManager alarmManager1 = (AlarmManager) getSystemService(ALARM_SERVICE); 
      final AlarmManager alarmManager2 = (AlarmManager) getSystemService(ALARM_SERVICE); 

      alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES , pendingIntent); 
      alarmManager1.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES , pendingIntent1); 
      alarmManager2.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES , pendingIntent2); 


     } 
    }); 

} 


protected void onStart() { 

    Intent intent = new Intent(this,AlertReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),100,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getApplicationContext(),101,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getApplicationContext(),102,intent,PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.cancel(pendingIntent); 
    alarmManager.cancel(pendingIntent1); 
    alarmManager.cancel(pendingIntent2); 
    super.onStart(); 
} 


@Override 
protected void onPause() { 

    Intent intent = new Intent(this,AlertReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),100,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getApplicationContext(),101,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getApplicationContext(),102,intent,PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.cancel(pendingIntent); 
    alarmManager.cancel(pendingIntent1); 
    alarmManager.cancel(pendingIntent2); 
    super.onPause(); 
} 

@Override 
protected void onResume() { 

    Intent intent = new Intent(this,AlertReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),100,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getApplicationContext(),101,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getApplicationContext(),102,intent,PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.cancel(pendingIntent); 
    alarmManager.cancel(pendingIntent1); 
    alarmManager.cancel(pendingIntent2); 
    super.onResume(); 
} 

@Override 
protected void onStop() { 

    Calendar calendar = Calendar.getInstance(); 
    Intent intent = new Intent(getApplicationContext(), AlertReceiver.class); 
    // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 

    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 100, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getApplicationContext(), 101, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getApplicationContext(), 102, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    AlarmManager alarmManager1 = (AlarmManager) getSystemService(ALARM_SERVICE); 
    AlarmManager alarmManager2 = (AlarmManager) getSystemService(ALARM_SERVICE); 

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES , pendingIntent); 
    alarmManager1.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES , pendingIntent1); 
    alarmManager2.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES , pendingIntent2); 

    super.onStop(); 
} 

@Override 
protected void onDestroy() { 
    Calendar calendar = Calendar.getInstance(); 
    Intent intent = new Intent(getApplicationContext(), AlertReceiver.class); 
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 

    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 100, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getApplicationContext(), 101, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getApplicationContext(), 102, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    AlarmManager alarmManager1 = (AlarmManager) getSystemService(ALARM_SERVICE); 
    AlarmManager alarmManager2 = (AlarmManager) getSystemService(ALARM_SERVICE); 

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES , pendingIntent); 
    alarmManager1.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES , pendingIntent1); 
    alarmManager2.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES , pendingIntent2); 

    super.onDestroy(); 
} 

Recivier.class

public class AlertReceiver extends BroadcastReceiver { 



@Override 
public void onReceive(final Context context, Intent intent) { 
    NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
    final Intent repeating_intent = new Intent(context,Activity12.class); 
// repeating_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    PendingIntent pendingIntent = PendingIntent.getActivity(context,100,repeating_intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(context).setContentIntent(pendingIntent) 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setContentTitle("AAA") 
      .setContentText("BBB"); 
      builder.setAutoCancel(true); 


     notificationManager.notify(100,builder.build()); 
    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 

      PendingIntent pendingIntent1 = PendingIntent.getActivity(context,101,repeating_intent,PendingIntent.FLAG_UPDATE_CURRENT); 
      NotificationCompat.Builder builder1 = new NotificationCompat.Builder(context).setContentIntent(pendingIntent1) 
        .setSmallIcon(R.drawable.ic_launcher) 
        .setContentTitle("CCC") 
        .setContentText("DDD"); 

      builder1.setAutoCancel(true); 
      NotificationManager notificationManager1 = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 

      notificationManager1.notify(101,builder1.build());   } 
    },1* 60 * 1000); 
    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      PendingIntent pendingIntent2 = PendingIntent.getActivity(context,102,repeating_intent,PendingIntent.FLAG_UPDATE_CURRENT); 
      NotificationCompat.Builder builder2 = new NotificationCompat.Builder(context).setContentIntent(pendingIntent2) 
        .setSmallIcon(R.drawable.ic_launcher) 
        .setContentTitle("EEE") 
        .setContentText("FFF"); 
      builder2.setAutoCancel(true); 

      NotificationManager notificationManager2 = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 

      notificationManager2.notify(102,builder2.build()); 
     } 
    },2*60*1000); 

активность, которая показывает, когда я нажимаю на уведомление.

public class Activity12 extends AppCompatActivity { 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_12); 

} 


@Override 
protected void onStart() { 

    Intent intent = new Intent(this,AlertReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),100,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getApplicationContext(),101,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getApplicationContext(),102,intent,PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 


    alarmManager.cancel(pendingIntent); 
    alarmManager.cancel(pendingIntent1); 
    alarmManager.cancel(pendingIntent2); 
    super.onStart(); 
} 


@Override 
protected void onPause() { 

    Intent intent = new Intent(this,AlertReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),100,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getApplicationContext(),101,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getApplicationContext(),102,intent,PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.cancel(pendingIntent); 
    alarmManager.cancel(pendingIntent1); 
    alarmManager.cancel(pendingIntent2); 
    super.onPause(); 
} 


@Override 
protected void onResume() { 

    Intent intent = new Intent(this,AlertReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),100,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getApplicationContext(),101,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getApplicationContext(),102,intent,PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.cancel(pendingIntent); 
    alarmManager.cancel(pendingIntent1); 
    alarmManager.cancel(pendingIntent2); 
    super.onResume(); 
} 


@Override 
protected void onStop() { 

    Calendar calendar =Calendar.getInstance(); 

    Intent intent = new Intent (getApplicationContext(),AlertReceiver.class); 
    // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 

    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),100,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getApplicationContext(),101,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getApplicationContext(),102,intent,PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES , pendingIntent); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES , pendingIntent1); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES , pendingIntent2); 

    super.onStop(); 
} 

@Override 
protected void onDestroy() { 

    Calendar calendar =Calendar.getInstance(); 
    Intent intent = new Intent (getApplicationContext(),AlertReceiver.class); 
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 

    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),100,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getApplicationContext(),101,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getApplicationContext(),102,intent,PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES , pendingIntent); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES , pendingIntent1); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES , pendingIntent2); 
    super.onDestroy(); 
} 

}

+1

В чем проблема с вашим текущим кодом? – earthw0rmjim

+0

Я не знаю, как добавить уведомление автоматически. Мне нужна помощь.! код работает – CJS

+0

, за исключением того, что уведомление все еще появляется, когда пользователь входит в приложение, и я не знаю, как его отменить (код отмены не работает) – CJS

ответ

0

Использование ScheduledExecutorService, в котором вы можете разместить код для запуска уведомления. Вам нужно будет указать конкретную логику относительно того, какое уведомление следует запускать. Вы можете установить повторяющееся расписание, как показано в примере в приведенной выше ссылке.

+0

моя проблема Я не знаю, как добавить уведомление автоматически, как я сказал, у меня есть 3 уведомления, как я могу, например, 100 уведомлений, и каждый из них отличается от другого и появляется после 5 минут – CJS

+0

Проверьте мой ответ дорогой –

+0

Странно, что знаю, что знает :( – CJS

1

Вы должны использовать фоновую службу, которая будет выполняет через каждые 5 минут

public class TimeService extends Service { 
    // constant 
    public static final long NOTIFY_INTERVAL = 10 * 1000; // 10 seconds 

    // run on another Thread to avoid crash 
    private Handler mHandler = new Handler(); 
    // timer handling 
    private Timer mTimer = null; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     // cancel if already existed 
     if(mTimer != null) { 
      mTimer.cancel(); 
     } else { 
      // recreate new 
      mTimer = new Timer(); 
     } 
     // schedule task 
     mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, NOTIFY_INTERVAL); 
    } 

    class TimeDisplayTimerTask extends TimerTask { 

     @Override 
     public void run() { 
      // run on another thread 
      mHandler.post(new Runnable() { 

       @Override 
       public void run() { 
        // Enter your notification code here to get notification after every 5 minutes 
        Toast.makeText(getApplicationContext(), getDateTime(), 
          Toast.LENGTH_SHORT).show(); 
       } 

      }); 
     } 

     private String getDateTime() { 
      // get date time in custom format 
      SimpleDateFormat sdf = new SimpleDateFormat("[yyyy/MM/dd - HH:mm:ss]"); 
      return sdf.format(new Date()); 
     } 

    } 

Вызовите сервис от Mainactivity

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    startService(new Intent(this, TimeService.class)); 
} 

В вы проявляете добавить

<service android:name=".TimeService"/> 
+0

, когда я помещаю создателя моего уведомления в контекст обработчика, дает мне ошибку, даже если я пишу контекст контекста; – CJS

+0

опубликуйте свой logcat –

+0

thx btw, но я хочу создать уведомление каждые 5 минут – CJS

Смежные вопросы