Pergunta

Sou novo no Android.Quero definir a notificação localmente, que a dispara diariamente em um horário específico.Quando eu inicio o serviço...A notificação é disparada imediatamente...

quero saber como disparar a notificação em um determinado momento sem disparar imediatamente

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

     }

    }

Passo 2:Começar serviço

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

}

Etapa 3:Receptor de radiodifusão

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

Como conseguir isso

Desde já, obrigado...

Foi útil?

Solução

Em setNotification() você está ligando

      sendBroadcast(intent);

Isso chama seu Startnotification.onReceive() imediatamente.

Além disso, você define a HORA na instância do Calendário assim:

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

Mas você não definiu explicitamente o indicador AM/PM para o formato de 12 horas (HOUR é usado para definir o horário de 12 horas).Isso significa que o indicador AM/PM ainda estará definido como estava quando você ligou. Calendar.getInstance().Se você executar este código, por exemplo, às 10h, e definir a HORA como 9, o alarme disparará imediatamente porque a hora está no passado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top