Android闹铃服务AlarmManager用法深入分析

 更新时间:2016年08月15日 09:07:51   作者:loving863  
这篇文章主要介绍了Android闹铃服务AlarmManager用法,结合实例形式深入分析了闹铃服务AlarmManager的功能、原理、定义与使用方法,需要的朋友可以参考下

本文实例讲述了Android闹铃服务AlarmManager用法。分享给大家供大家参考,具体如下:

对应AlarmManage有一个AlarmManagerServie服务程 序,该服务程序才是正真提供闹铃服务的,它主要维护应用程序注册下来的各类闹铃并适时的设置即将触发的闹铃给闹铃设备(在系统中,linux实现的设备名 为"/dev/alarm"),并且一直监听闹铃设备,一旦有闹铃触发或者是闹铃事件发生,AlarmManagerServie服务程序就会遍历闹铃列 表找到相应的注册闹铃并发出广播。该服务程序在系统启动时被系统服务程序system_service启动并初始化闹铃设备(/dev/alarm)。当 然,在JAVA层的AlarmManagerService与Linux Alarm驱动程序接口之间还有一层封装,那就是JNI。

AlarmManager将应用与服务分割开来后,使得应用程序开发者不用 关心具体的服务,而是直接通过AlarmManager来使用这种服务。这也许就是客户/服务模式的好处吧。AlarmManager与 AlarmManagerServie之间是通过Binder来通信的,他们之间是多对一的关系。

在android系统中,AlarmManage提供了3个接口5种类型的闹铃服务。

3个接口:

// 取消已经注册的与参数匹配的闹铃
void cancel(PendingIntent operation)
//注册一个新的闹铃
void set( int type, long triggerAtTime, PendingIntent operation)
//注册一个重复类型的闹铃
void setRepeating( int type, long triggerAtTime, long interval, PendingIntent operation)
//设置时区
void setTimeZone(String timeZone)

Java代码:

// 取消已经注册的与参数匹配的闹铃
void cancel(PendingIntent operation)
 //注册一个新的闹铃
void set(int type, long triggerAtTime, PendingIntent operation)
 //注册一个重复类型的闹铃
void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)
 //设置时区
void setTimeZone(String timeZone)

5个闹铃类型

public static final int ELAPSED_REALTIME
// 当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是相对时间,是从系统启动后开始计时的,包括睡眠时 间,可以通过调用SystemClock.elapsedRealtime()获得。系统值是3 (0x00000003)。
public static final int ELAPSED_REALTIME_WAKEUP
//能唤醒系统,用法同ELAPSED_REALTIME,系统值是2 (0x00000002) 。
public static final int RTC
//当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是绝对时间,所用时间是UTC时间,可以通过调用 System.currentTimeMillis()获得。系统值是1 (0x00000001) 。
public static final int RTC_WAKEUP
//能唤醒系统,用法同RTC类型,系统值为 0 (0x00000000) 。
Public static final int POWER_OFF_WAKEUP
//能唤醒系统,它是一种关机闹铃,就是说设备在关机状态下也可以唤醒系统,所以我们把它称之为关机闹铃。使用方法同RTC类型,系统值为4(0x00000004)。

Java代码 :

public static final int ELAPSED_REALTIME
//当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是相对时间,是从系统启动后开始计时的,包括睡眠
时间,可以通过调用SystemClock.elapsedRealtime()获得。系统值是3 (0x00000003)。
public static final int ELAPSED_REALTIME_WAKEUP
//能唤醒系统,用法同ELAPSED_REALTIME,系统值是2 (0x00000002) 。
public static final int RTC
//当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是绝对时间,所用时间是UTC时间,可以通过调用
 System.currentTimeMillis()获得。系统值是1 (0x00000001) 。
public static final int RTC_WAKEUP
//能唤醒系统,用法同RTC类型,系统值为 0 (0x00000000) 。
Public static final int POWER_OFF_WAKEUP
//能唤醒系统,它是一种关机闹铃,就是说设备在关机状态下也可以唤醒系统,所以我们把它称之为关机闹铃。使用方法同RTC类型,系统值为
4(0x00000004)。

注意一个重要的参数PendingIntent。这个PendingIntent可以说是 Intent的进一步封装,他既包含了Intent的描述又是Intent行为的执行(这种定义也许不太严格),如果将Intent比作成一个订单的 话,PendingIntent更像是一个下订单的人,因为它既要负责将订单发出去,也要负责订单发送后的处理,比如发送成功后要准备验收订单货物,发送 失败后要重发还是取消订单等操作。开发者可以通过调用
getActivity(Context, int, Intent, int)
getBroadcast(Context, int, Intent, int)
getService(Context, int, Intent, int)

三种不同方式来得到一个PendingIntent实例。

getBroadcast——通过该函数获得的PendingIntent将会 扮演一个广播的功能,就像调用 Context.sendBroadcast()函数一样。当系统通过它要发送一个intent时要采用广播的形式,并且在该intent中会包含相应的 intent接收对象,当然这个对象我们可以在创建PendingIntent的时候指定,也可以通过ACTION 和CATEGORY等描述让系统自动找到该行为处理对象。

Intent intent = new Intent(AlarmController. this , OneShotAlarm. class );
PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this , 0 , intent, 0 );

Java代码:

Intent intent = new Intent(AlarmController.this, OneShotAlarm.class);
PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this, 0, intent, 0);

getActivity——通过该函数获得的PendingIntent可以直 接启动新的activity, 就像调用 Context.startActivity(Intent)一样.不过值得注意的是要想这个新的Activity不再是当前进程存在的Activity 时。我们在intent中必须使用Intent.FLAG_ACTIVITY_NEW_TASK.

// The PendingIntent to launch our activity if the user selects this notification
PendingIntent contentIntent = PendingIntent.getActivity(this , 0 , new Intent( this , AlarmService. class ), 0 );

Java代码:

// The PendingIntent to launch our activity if the user selects this notification
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, AlarmService.class), 0);

getService——通过该函数获得的PengdingIntent可以直接启动新的Service,就像调用Context.startService()一样。

// Create an IntentSender that will launch our service, to be scheduled
// with the alarm manager.
mAlarmSender = PendingIntent.getService(AlarmService.this ,
 0 , new Intent(AlarmService. this , AlarmService_Service. class ), 0 );

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结

希望本文所述对大家Android程序设计有所帮助。

相关文章

  • Android音乐播放器制作 扫描本地音乐显示在手机(一)

    Android音乐播放器制作 扫描本地音乐显示在手机(一)

    这篇文章主要介绍了Android音乐播放器的制作方法,扫描本地音乐显示在手机上,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Android开发之TabHost选项卡及相关疑难解决方法

    Android开发之TabHost选项卡及相关疑难解决方法

    这篇文章主要介绍了Android开发之TabHost选项卡及相关疑难解决方法,结合实例形式较为详细的分析了Android开发中TabHost选项卡的常见用法以及相关疑难问题解决方法,需要的朋友可以参考下
    2019-03-03
  • 基于android中权限的集合汇总

    基于android中权限的集合汇总

    本篇文章把android中的权限进行了集合汇总。需要的朋友参考下
    2013-05-05
  • Android中DialogFragment自定义背景与宽高的方法

    Android中DialogFragment自定义背景与宽高的方法

    DialogFragment 弹出框默认是在屏幕的中央,左右还有留白,那么如何自定义背景和宽高呢?下面这篇文章就来给大家介绍了关于Android中DialogFragment自定义背景与宽高的方法,需要的朋友可以参考下。
    2017-08-08
  • Android获取应用程序名称(ApplicationName)示例

    Android获取应用程序名称(ApplicationName)示例

    本文以实例方式为大家介绍下获取应用程序名称(ApplicationName)的具体实现,感兴趣的各位可以参考下哈
    2013-06-06
  • 解决VSCode调试react-native android项目错误问题

    解决VSCode调试react-native android项目错误问题

    这篇文章主要介绍了VSCode调试react-native android项目错误解决办法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • android编程开发之全屏和退出全屏的实现方法

    android编程开发之全屏和退出全屏的实现方法

    这篇文章主要介绍了android编程开发之全屏和退出全屏的实现方法,以实例形式较为详细的分析了Android全屏及退出全屏的页面布局与功能实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Android Hilt Retrofit Paging3使用实例

    Android Hilt Retrofit Paging3使用实例

    这篇文章主要介绍了Android Hilt依赖注入的使用,首先,某个类的成员变量称为依赖,如若此变量想要实例化引用其类的方法,可以通过构造函数传参或者通过某个方法获取对象,此等通过外部方法获取对象实例的称为依赖注入
    2023-01-01
  • Android实现两个数相加功能

    Android实现两个数相加功能

    这篇文章主要为大家详细介绍了Android实现两个数相加功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • android实现计步功能初探

    android实现计步功能初探

    这篇文章主要介绍了android实现计步功能初探,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12

最新评论