一个简单的Android定时任务

 更新时间:2017年06月16日 11:55:08   作者:windarain  
这篇文章主要为大家详细介绍了一个简单的Android定时任务,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

使用AlarmManager来实现定时提醒,它提供了一种访问系统闹钟服务的方式。在全局中,达到设定的时间,
在它上面注册的一个Intent将会被广播,接着启动相应的应用程序,可以通过自定义Receiver来实现。

首先要在AndroidManifest.xml中进行注册

<receiver android:name=".AlarmReceiver">
      <intent-filter>
        <action android:name="CLOCK" />
      </intent-filter>
</receiver>

自定义一个闹钟接收器,getIntExtra可用于接受发送方putExtra传过来的值,Intent i = new Intent(“CLOCK”)其中的“CLOCK”是注册时使用的seceiver的name。

public class AlarmReceiver extends BroadcastReceiver {
  private int _id;
  private String str;
  @Override
  public void onReceive(Context context, Intent intent) {
    _id = intent.getIntExtra("ID", -1);
    Intent i = new Intent("CLOCK");
    i.setClass(context, NoteEditor.class);
    i.putExtra("ID", _id);
    String str = intent.getStringExtra("NOTE");
    Toast.makeText( context, str, Toast.LENGTH_SHORT).show();
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
  }
}


时间的获取通过DatePickerDialog和TimePickerDialog,需要注意的是DatePickerDialog的月份是从0开始。将获取的数据放在Calendar类中,其中月份的存储也是从0开始。

final AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar alarmCalendar = Calendar.getInstance();
alarmCalendar.set(mYear, mMonth-1, mDay, mHour, mMinute,0);
Intent i = new Intent("CLOCK");
i.setClass(this, AlarmReceiver.class);
i.putExtra("ID", _id);
String note="notes";
i.putExtra("NOTE",note);

设置一个PendingIntent对象作为闹钟响应的对象,发送广播。第二个参数可以为0,但是因为做的是一次性的闹钟,如果为0的话,新设的闹钟会将之前设的闹钟覆盖掉。FLAG_UPDATE_CURRENT: 如果希望获取的PendingIntent对象与已经存在的PendingIntent对象相比,如果只是Intent附加的数据不同, 那么当前存在的PendingIntent对象不会被取消,而是重新加载新的Intent附加的数据。

PendingIntent pi = PendingIntent.getBroadcast(this, _id,i,PendingIntent.FLAG_UPDATE_CURRENT);

发送闹钟请求,设置在alarmCalendar.getTimeInMillis()时间启动由pi指定的组件。
第一个参数用来指定定时服务的类型,主要可选以下值:

AlarmManager.ELAPSED_REALTIME:睡眠状态下不可用,该状态下闹钟使用相对时间。
AlarmManager.ELAPSED_REALTIME_WAKEUP:在睡眠状态下会唤醒系统并执行提示功能,也使用相对时间。
AlarmManager.RTC:该状态睡眠状态下不可用,使用绝对时间,即当前系统时间。
AlarmManager.RTC_WAKEUP:闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用绝对时间。

am.set(AlarmManager.RTC_WAKEUP, alarmCalendar.getTimeInMillis(), pi);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android中RecycleView与ViewPager冲突的解决方法及原理

    Android中RecycleView与ViewPager冲突的解决方法及原理

    这篇文章主要给大家介绍了关于Android中RecycleView与ViewPager冲突的解决方法及原理的相关资料,以及ViewPager嵌套RecycleView卡顿问题的处理方法,文中通过示例代码介绍的非常狎昵,需要的朋友可以参考下
    2018-07-07
  • Android中使用ContentProvider管理系统资源的实例

    Android中使用ContentProvider管理系统资源的实例

    这篇文章主要介绍了Android中使用ContentProvider管理系统资源的实例,讲解了ContentProvider对系统中联系人及多媒体资源的管理例子,需要的朋友可以参考下
    2016-04-04
  • Flutter开发技巧ListView去除水波纹方法示例

    Flutter开发技巧ListView去除水波纹方法示例

    这篇文章主要为大家介绍了Flutter开发技巧ListView去除水波纹方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Android Secret Code(输入字符弹出手机信息)详解

    Android Secret Code(输入字符弹出手机信息)详解

    这篇文章主要介绍了Android Secret Code(输入字符弹出手机信息)详解的相关资料,需要的朋友可以参考下
    2016-11-11
  • Android实现调取支付宝健康码

    Android实现调取支付宝健康码

    大家好,本篇文章主要讲的是Android实现调取支付宝健康码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Android画个时钟玩玩

    Android画个时钟玩玩

    这篇文章主要向大家介绍了Android画时钟的方法,内容很详细,分享了每一个制作步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • Android 实现加载大图片的方法

    Android 实现加载大图片的方法

    对于超大的图片,如果不缩放的话,容易导致内存溢出。而经过处理后,无论多大的图片,都能够在手机屏幕上加载出来,不会导致内存溢出。本文将对Android 加载大图片的实现方法进行介绍,下面跟着小编一起来看下吧
    2017-04-04
  • Android自定义View实现圆形进度条

    Android自定义View实现圆形进度条

    这篇文章主要为大家详细介绍了Android自定义View实现圆形进度条,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • Android开发实现Fragment监听返回键事件功能的方法

    Android开发实现Fragment监听返回键事件功能的方法

    这篇文章主要介绍了Android开发实现Fragment监听返回键事件功能的方法,结合实例形式分析了Android使用Fragment监听并屏蔽返回键按钮的实现方法与相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • Android RecyclerLineChart实现图表绘制教程

    Android RecyclerLineChart实现图表绘制教程

    这篇文章主要为大家介绍了Android RecyclerLineChart实现图表绘制教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12

最新评论