android - 如何实现每年和每月的重复报警?

标签 android

我想在我的应用程序中设置每月和每年的闹钟。我每周都这样做。 AlarmManager.INTERVAL_DAY 帮助了我。但我找不到实现每月和每年重复的好方法。

到目前为止搜索:

http://www.satyakomatineni.com/akc/display?url=displaynoteimpurl&ownerUserId=satya&reportId=3503

http://groups.google.com/group/android-developers/browse_thread/thread/9f946e40307073c4?pli=1

有没有其他方法可以做到这一点?任何帮助表示赞赏。

最佳答案

我认为,这种方法存在两个固有问题:

  • AlarmManager 不会接受较大的时间间隔,因为毫秒数会溢出参数

  • 我认为闹钟不会在您的手机重启后继续存在,这种情况肯定会在如此长的一段时间内发生。

我建议您将每个警报存储在一个安全的地方,并使用 AlarmManager 和 onBoot 接收器的组合来检查您列表中的一个警报是否必须在今天触发,如果如果明天必须重新安排警报以唤醒您没有。

public class AlarmService extends Service {
  //compat to support older devices
  @Override
  public void onStart(Intent intent, int startId) {
      onStartCommand(intent, 0, startId);
  }


  @Override
  public int onStartCommand (Intent intent, int flags, int startId){
   //your method to check if an alarm must be fired today
   checkForTodayAlarmsAndBehaveAppropriately();

   //reschedule me to check again tomorrow
    Intent serviceIntent = new Intent(AlarmService.this,AlarmService.class);
    PendingIntent restartServiceIntent = PendingIntent.getService(AlarmService.this, 0, serviceIntent,0);
    AlarmManager alarms = (AlarmManager)getSystemService(ALARM_SERVICE);
    // cancel previous alarm
    alarms.cancel(restartServiceIntent);
    // schedule alarm for today + 1 day
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DATE, 1);

    // schedule the alarm
    alarms.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), restartServiceIntent);
  }

}

要在启动时启动您的服务,请使用:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class serviceAutoLauncher  extends BroadcastReceiver{

@Override
  public void onReceive(Context context, Intent intent) {
      Intent serviceIntent = new Intent(context,AlarmService.class);
      context.startService(serviceIntent);
  }

}

最后将此添加到您的 list 中以安排您的 serviceAutoLauncher 在每次启动时启动:

    <receiver android:name="serviceAutoLauncher">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            <category android:name="android.intent.category.HOME"></category>
        </intent-filter>
    </receiver>

关于android - 如何实现每年和每月的重复报警?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7568233/

相关文章:

java - (android) 启动我的应用程序时出现错误 java.lang.IllegalStateException

java - Gradle Play-Services AAR依赖项不起作用

Android - 使用 Tomcat (servlets) 进行 HTTP 推送

android - react native LruCache : Does it cache images from image urls

android - 收到短信后在 Android 中刷新 ListView 不起作用

java - LibGDX 闪烁

android - 从您的应用程序向 Google Play 商店发送费率

android - LocationClient 在 `onDisconnect` 处自动重新连接

android - 找不到方法 XXX,引用自方法 YYY

android - Android动态壁纸初始化时如何获取屏幕宽高?