Как установить Уведомление локально, используя Service и Broadcastreceiver?

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

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

Шаг 1:

public class startservice extends Activity {

     @Override
     public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      Button button=(Button) findViewById(R.id.button1);
      button.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Intent intent = new Intent(startservice.this,MainActivity.class);
            startservice.this.startService(intent);
        }
    });

     }

    }

Шаг 2: Запустите Сервис

public class MainActivity extends Service {

     AlarmManager am;
     Calendar calendar;
     int count=0;


     @Override
     public void onCreate() {
      super.onCreate();

      am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
             calendar=Calendar.getInstance();
             setNotification();

     }
     public void setNotification() {
          Intent intent = new Intent(this, Startnotification.class);
          calendar.set(Calendar.HOUR, 9); // At the hour you wanna fire
          calendar.set(Calendar.MINUTE,12); // Particular minute
          calendar.set(Calendar.SECOND, 0);
          double x = Math.random();
          String value=String.valueOf(x);
          intent.putExtra("name", value);
          sendBroadcast(intent);
          PendingIntent pendingIntent = PendingIntent.getBroadcast(this, count,intent, PendingIntent.FLAG_UPDATE_CURRENT);       
          am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),3600000,pendingIntent);
        count++;
         }
    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

}

Шаг 3: BroadcastReceiver

public class Startnotification extends BroadcastReceiver {

     NotificationManager nm;


     @SuppressWarnings("deprecation")
    @Override
     public void onReceive(Context context, Intent intent) {
      nm = (NotificationManager) context
        .getSystemService(Context.NOTIFICATION_SERVICE);
      String getvalue= intent.getStringExtra("name");
      CharSequence from = getvalue;
      CharSequence message = "Android calendar...";
      PendingIntent contentIntent = PendingIntent.getService(context, 0, new Intent(),0);

      Notification notif = new Notification(R.drawable.ic_launcher,"Android calendar...", System.currentTimeMillis());
      notif.setLatestEventInfo(context, from, message, contentIntent);
      nm.notify(1, notif);
      System.out.println("BroadcastReceiver");
     }
    }

Как этого добиться

Заранее спасибо...

1 ответ

Решение

В setNotification() ты звонишь

      sendBroadcast(intent);

Это называет ваш Startnotification.onReceive() немедленно.

Кроме того, вы устанавливаете HOUR в экземпляре Calendar следующим образом:

calendar.set(Calendar.HOUR, 9); // At the hour you wanna fire

Но вы явно не установили индикатор AM/PM для 12-часового времени (HOUR используется для установки 12-часового времени). Это означает, что индикатор AM/PM по-прежнему будет установлен на то, что было, когда вы звонили Calendar.getInstance(), Если вы запустите этот код, например, в 10:00 утра и установите для ЧАСА значение 9, будильник немедленно отключится, потому что время уже прошло.

Другие вопросы по тегам