一个简单的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);

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

(0)

相关推荐

  • Android 定时任务过程详解

    在Android开发中,通过以下三种方法定时执行任务: 一.采用Handler与线程的sleep(long)方法(不建议使用,java的实现方式) 二.采用Handler的postDelayed(Runnable, long)方法(最简单的android实现) 三.采用Handler与timer及TimerTask结合的方法(比较多的任务时建议使用) android里有时需要定时循环执行某段代码,或者需要在某个时间点执行某段代码,这个需求大家第一时间会想到Timer对象,没错,不过我们还有更好的

  • Android中定时执行任务的3种实现方法(推荐)

    在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,Java的实现方式) 二.采用Handler的postDelayed(Runnable, long)方法(最简单的android实现) 三.采用Handler与timer及TimerTask结合的方法(比较多的任务时建议使用) 下面逐一介绍: 一.采用Handle与线程的sleep(long)方法 Handler主要用来处理接受到的消息.这只是最主要的方法,当然Handle

  • 一个简单的Android定时任务

    使用AlarmManager来实现定时提醒,它提供了一种访问系统闹钟服务的方式.在全局中,达到设定的时间, 在它上面注册的一个Intent将会被广播,接着启动相应的应用程序,可以通过自定义Receiver来实现. 首先要在AndroidManifest.xml中进行注册 <receiver android:name=".AlarmReceiver"> <intent-filter> <action android:name="CLOCK"

  • 一个简单的Android轨迹动画

    本文实例为大家分享了Android轨迹动画的具体代码,供大家参考,具体内容如下 二.需求描述 年中那会儿基友的公司给他了一张只有一条曲线的图,想让他按照曲线的轨迹动态展示整个曲线,然而基友忙于把妹,一个馒头的代价收买了我,于是帮他写了代码.先看下实现效果 上原始图(原始图的轨迹曲线是白色的,其他部分是透明的,这里为了便于观察,我将背景调为黑色) 三.分析实现 讲道理,刚拿到这个图片的时候我也有点懵逼,一个毫无规律的曲线很显然不能通过简单的方程式去描述点的具体位置,甚至想说设计直接给个动画岂不美滋

  • 一个简单的Android圆弧刷新动画

    之前刷贴吧的时候看到的贴吧的刷新动画,就是一个圆弧旋转的动画,感觉挺好看的,就抽空实现了一下. 最终的结果是这样的: 从上图中可以看出,动画的效果是三段圆弧进行旋转,同时弧度也在逐渐增大缩小,这里采用的是在onDraw中绘制三段圆弧. // 绘制圆弧 mPaint.setColor(mTopColor); canvas.drawArc(left, top, right, bottom, startAngle, sweepAngle, false, mPaint); mPaint.setColor

  • 简单实现Android绘图板

    下面这个实例通过前面学过的Paint.Canvas等2D绘画技术来实现一个简单的Android的绘图板. 具体实现代码: 创建一个名为DrawView的类,该类继承自android.view.View类.在该类中,首先定义程序中所需的属性,然后添加构造方法,并重写onDraw(Canvas canvas)方法: DrawView.java: package com.example.test; import android.content.Context; import android.graph

  • Android中使用Kotlin实现一个简单的登录界面

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源. Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行. 在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言. 刚接触Kotlin的第一天,仿照QQ的登录界面,先写一个简单的登录界面,虽然笔者用的不是很熟,还在慢慢摸索,但是Kotlin是真

  • Android实现一个简单的单词本

    目录 布局设计 代码 AddDanciActivity.java DBOpenHelper.java 效果图 总结 本文基于Java实现了一个简单的单词本安卓app,用的是SQLite数据库,包括布局文件.源码及实现图. 布局设计 单词本主界面 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk

  • 基于Java实现一个简单的单词本Android App的实践

    目录 布局设计 代码 AddDanciActivity.java DBOpenHelper.java 本文基于Java实现了一个简单的单词本安卓app,用的是SQLite数据库,包括布局文件.源码及实现图. 布局设计 单词本主界面 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an

  • 简单实现Android闹钟功能

    闹钟的简单实现,只有显示时间和设置闹钟. AlarmView package com.example.lenovo.clock2; import android.app.AlarmManager; import android.app.PendingIntent; import android.app.TimePickerDialog; import android.content.Context; import android.content.DialogInterface; import a

  • Django REST框架创建一个简单的Api实例讲解

    Create a Simple API Using Django REST Framework in Python WHAT IS AN API API stands for application programming interface. API basically helps one web application to communicate with another application. Let's assume you are developing an android app

随机推荐