android之定时器AlarmManager

2023-10-09 13:18

本文主要是介绍android之定时器AlarmManager,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

效果图:

       当我们点击定时时,会弹出一个时间选择器,选定好时间之后,系统便可以进行定时了。注意,这里可不是会真的响铃,我们在定时的任务里并没有添加响铃的代码,只是在Logcat中做了个简单的打印。本例子重点在于讲解在android中AlarmManager的使用。

      activity的代码:

[java] view plain copy print ?
  1. package cn.com.chenzheng_java;  
  2.   
  3. import java.util.Calendar;  
  4.   
  5. import android.app.Activity;  
  6. import android.app.AlarmManager;  
  7. import android.app.PendingIntent;  
  8. import android.app.TimePickerDialog;  
  9. import android.app.TimePickerDialog.OnTimeSetListener;  
  10. import android.content.Intent;  
  11. import android.os.Bundle;  
  12. import android.util.Log;  
  13. import android.view.View;  
  14. import android.view.View.OnClickListener;  
  15. import android.widget.Button;  
  16. import android.widget.CheckBox;  
  17. import android.widget.CompoundButton;  
  18. import android.widget.TimePicker;  
  19. import android.widget.CompoundButton.OnCheckedChangeListener;  
  20.   
  21. public class AlarmManagerActivity extends Activity implements OnClickListener,OnTimeSetListener,OnCheckedChangeListener{  
  22.     Calendar calendar = Calendar.getInstance();// 代表当前时间的日历  
  23.     Button button1 ;  
  24.     CheckBox checkBox;  
  25.     boolean flag = false ;// 是否只执行一次  
  26.       
  27.     @Override  
  28.     protected void onCreate(Bundle savedInstanceState) {  
  29.         super.onCreate(savedInstanceState);  
  30.         setContentView(R.layout.alarm);  
  31.           
  32.         button1 = (Button) findViewById(R.id.button_alarm1);  
  33.         checkBox = (CheckBox) findViewById(R.id.checkBox1_alarm);  
  34.         checkBox.setOnCheckedChangeListener(this);  
  35.           
  36.         button1.setOnClickListener(this);  
  37.     }  
  38.   
  39.     @Override  
  40.     public void onClick(View v) {  
  41.         if(v==button1){  
  42.             calendar.setTimeInMillis(System.currentTimeMillis());  
  43.             new TimePickerDialog(AlarmManagerActivity.thisthis,  
  44.                     calendar.get(Calendar.HOUR_OF_DAY),  
  45.                     calendar.get(Calendar.MINUTE), true).show();  
  46.         }  
  47.     }  
  48.   
  49.     /** 
  50.      * 当我们设置了新时间时触发。 
  51.      */  
  52.     @Override  
  53.     public void onTimeSet(TimePicker view, int hourOfDay, int minute) {  
  54.           
  55.         // 将时间设置为定时的时间  
  56.         calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);  
  57.         calendar.set(Calendar.MINUTE, minute);  
  58.           
  59.         Intent intent = new Intent(AlarmManagerActivity.this,MyAlarmBroadCast.class);  
  60.         PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);  
  61.           
  62.         /*** 
  63.          * 获取全局定时器的服务管理器 
  64.          */  
  65.         AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);  
  66.       
  67.         if(flag){  
  68.               
  69.           
  70.         /** 
  71.          * 指定的任务只会执行一次,如果该pendingIntent指定的任务已经被执行过了,那么该方法直接会被cancel掉。 
  72.          *  set(int type, long triggerAtTime, PendingIntent operation) 
  73.          *  type 指定定时模式。 
  74.          *  triggerAtTime 触发任务的时间。该参数和定时模式息息相关 
  75.          *  operation 该参数指定一个广播Intent,当时间到了时,系统会广播里面的intent,触发相应的广播接收者执行某些操作,比如响铃…… 
  76.          */  
  77.         alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);  
  78.         }  
  79.         else  
  80.         {  
  81.             /** 
  82.              * 通过该方法指定的任务会一直间隔执行,第三个参数就指定了执行的时间间隔 
  83.              * 如果我们想取消的话,请使用:alarmManager.cancel(pendingIntent); 
  84.              * 注意,这里的pendingIntent要和setRepeating方法中的一致哦。 
  85.              */  
  86.             alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 5*1000, pendingIntent);    
  87.         }  
  88.         Log.i("通知""定时成功!");  
  89.           
  90.     }  
  91.       
  92.       
  93.       
  94.     @Override  
  95.     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {  
  96.         flag = !isChecked;  
  97.     }  
  98.       
  99.       
  100.       
  101.       
  102. }  

alarm.xml

[xhtml] view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent" android:layout_height="match_parent"  
  4.     android:orientation="vertical">  
  5.     <AnalogClock android:id="@+id/analogClock1_alarm"  
  6.         android:layout_width="wrap_content" android:layout_height="wrap_content"></AnalogClock>  
  7.     <CheckBox android:text="是否重复响铃" android:id="@+id/checkBox1_alarm" android:layout_width="wrap_content" android:layout_height="wrap_content"></CheckBox>  
  8.     <Button android:text="定时" android:id="@+id/button_alarm1"  
  9.         android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>  
  10. </LinearLayout>  

MyAlarmBroadCast.java

[java] view plain copy print ?
  1. package cn.com.chenzheng_java;  
  2.   
  3. import android.content.BroadcastReceiver;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.util.Log;  
  7. import android.widget.Toast;  
  8.   
  9. /** 
  10.  * 声明接受AlarmManager时间到了时发布的广播 
  11.  * @author chenzheng_java 
  12.  */  
  13. public class MyAlarmBroadCast extends BroadcastReceiver{  
  14.   
  15.     @Override  
  16.     public void onReceive(Context context, Intent intent) {  
  17.         Log.i("通知""收到了广播");  
  18.         // 可以在此处添加响铃的代码  
  19.     }  
  20.       
  21. }  

Manifest.xml代码:

[xhtml] view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="cn.com.chenzheng_java"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <uses-sdk android:minSdkVersion="8" />  
  7.   
  8.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  9.         <activity android:name="AlarmManagerActivity"  
  10.                   android:label="@string/app_name">  
  11.             <intent-filter>  
  12.                 <action android:name="android.intent.action.MAIN" />  
  13.                 <category android:name="android.intent.category.LAUNCHER" />  
  14.             </intent-filter>  
  15.         </activity>  
  16.     <receiver android:name="MyAlarmBroadCast"/>          
  17.     </application>  
  18. </manifest>  

------------------------------------------------------------------

AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟。通过对它的使用,个人觉得叫全局定时器比较合适,其实它的作用和Timer有点相似。都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作

使用的步骤:

第一:获取管理器。AlarmManager alarmManager = this.getSystemService(ALARM_SERVICE);

第二:通过AlarmManager的set和setRepeating方法定时。可以通过cancel()方法取消定时。

      在set和setRepeating方法中,第一个参数type代表定时模式,这里的定时模式主要有以下几种。

坑1:

小米2S中,setRepeating的intervalTime循环下次的周期,貌似最小是5分钟,网上有很多人遇到了这个问题!!坑爹!

参考:http://my.oschina.net/mstian/blog/185391

我的理解:某些手机有最小间隔时间限制

注意权限: <uses-permission android:name="android.permission.WAKE_LOCK" />

转载自:http://blog.csdn.net/chenzheng_java/article/details/6263096

 

这篇关于android之定时器AlarmManager的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/173092

相关文章

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me