2

我需要设置一个重复警报,一旦触发,就会发出通知。

脚步:

  1. 我有一个包含一些日期细节的界面(只是想了一下,也许我应该启动一个显示“设置警报”功能的意图)。详细信息的产品是需要输入警报方法的日期时间字符串。
  2. 设置警报时,我需要创建对它的引用,以便用户可以将其删除。(或者可能不是,最佳实践是什么?也许用户只能从“警报”部分删除警报)
  3. 当警报响起时,将创建通知。

我不确定警报系统是如何工作的。警报可能应该是静音的,可能带有振动。这是直接设置吗?

我需要服务还是广播接收器可以完成这项工作?

基本上我只需要一些指示。我是否正确地考虑了这一点?那里有教程(我还没有找到任何东西)。提前致谢。

4

1 回答 1

11

这是我如何在我的应用程序中使用 AlarmService 的演练。

  1. 设置一个 AlarmManager 在 x 分钟内触发。

  2. 响应警报,启动服务。

  3. 创建您的通知并让您的服务使用新的警报自行设置,以便在另外 x 分钟内再次触发。

  4. 该服务自行关闭。

1.

    Intent alarmIntent = new Intent(this, MyAlarm.class);
    long scTime = 60* 10000;// 10 minutes
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + scTime, pendingIntent);

2.

    public class MyAlarm extends BroadcastReceiver
    {

       @Override
       public void onReceive(Context context, Intent intent) {
          Log.d("Alarm Recieved!", "YAAAY");
          Intent i = new Intent(context, InviteService.class);
          context.startService(i);
       }
    }

3.

      public class InviteService extends IntentService
 {

  /** 
   * A constructor is required, and must call the super IntentService(String)
   * constructor with a name for the worker thread.
   */

  public InviteService() {
      super("InviteService");
  }

  /**
   * The IntentService calls this method from the default worker thread with
   * the intent that started the service. When this method returns, IntentService
   * stops the service, as appropriate.
   */

  @Override
  protected void onHandleIntent(Intent intent) {

                  String ns = Context.NOTIFICATION_SERVICE;
                  NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);

                  int icon = R.drawable.logo;
                  CharSequence tickerText = "New Invite!";
                  long when = System.currentTimeMillis();

                  Notification notification = new Notification(icon, tickerText, when);
                  notification.flags |= Notification.FLAG_AUTO_CANCEL;
                  notification.defaults |= Notification.DEFAULT_VIBRATE;

                  Context context = getApplicationContext();
                  CharSequence contentTitle = "Title";
                  CharSequence contentText = "Text";
                  Intent notificationIntent = new Intent(this, Destination.class);
                  Bundle partyBundle = new Bundle();                    

                  PendingIntent contentIntent = PendingIntent.getActivity(this, SOME_ID, notificationIntent, 0);

                  notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

                  int NOTIFICATION_ID = SOME_ID;

                  Log.d("NOTIFICATION_ID", "" + NOTIFICATION_ID);
                  mNotificationManager.notify(NOTIFICATION_ID, notification);

4.(同班)

      Intent alarmIntent = new Intent(this, MyAlarm.class);
      long scTime = 60*1000;//mins
      PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
      AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
      alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + scTime, pendingIntent);

      stopService(intent);
      }
    }

希望这可以帮助!

编辑

为什么要使用服务?

在 BroadcastReceiver 中做太多处理是不明智的。虽然您可以在 BroadcastReciever 中进行一些处理,但在 Service 中执行此操作更安全,您可以在 StackOverflow 这个问题BroadcastReceiver vs Service中找到一些信息

于 2012-08-30T16:17:25.687 回答