如何使用Service和Broadcastreceiver在本地设置通知?

时间:2014-01-10 14:36:56

标签: android android-intent android-service android-pendingintent android-broadcast

我是android新手。我想在本地设置Notification,每天在特定时间点击它。当我启动服务时......通知会立即触发......

我想知道如何在特定时间触发通知而不立即解雇

第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 个答案:

答案 0 :(得分:0)

setNotification()你正在打电话

      sendBroadcast(intent);

立即拨打Startnotification.onReceive()

另外,您可以在Calendar实例中设置HOUR,如下所示:

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

但是您没有明确地将AM / PM指示器设置为12小时(HOUR用于设置12小时时间)。这意味着AM / PM指示器仍将设置为您调用Calendar.getInstance()时的状态。如果您运行此代码(例如,上午10:00)并将HOUR设置为9,则警报将立即关闭,因为时间已过去。