Android 定时执行任务 AlarmManager的使用(可用于闹钟开发)

作者 admin 在 28 六月 2011, 8:17 下午

2011年7月13日加注:所有的定时任务在手机重启后会消失,如果需要重启后继续用,可以加个开机自启,然后重新设置.

AlarmManager可以在指定的时间执行指定的任务,最常用的功能就是利用这个类写闹铃程序。
下面开始学习AlarmManager用法。
首先,设置AlarmManager在指定的时间发送广播:

packagecom.pocketdigi.alarm;importjava.util.Calendar;importandroid.app.Activity;importandroid.app.AlarmManager;importandroid.app.PendingIntent;importandroid.content.Intent;importandroid.os.Bundle;publicclassAlarmActivityextendsActivity{/***Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Calendarc=Calendar.getInstance();c.set(Calendar.YEAR,2011);c.set(Calendar.MONTH,Calendar.JUNE);//也可以填数字,0-11,一月为0c.set(Calendar.DAY_OF_MONTH,28);c.set(Calendar.HOUR_OF_DAY,19);c.set(Calendar.MINUTE,50);c.set(Calendar.SECOND,0);//设定时间为2011年6月28日19点50分0秒//c.set(2011,05,28,19,50,0);//也可以写在一行里Intentintent=newIntent("cn.pocketdigi.update.alarm");intent.setClass(this,AlarmReceiver.class);PendingIntentpi=PendingIntent.getBroadcast(this,0,intent,0);//设置一个PendingIntent对象,发送广播AlarmManageram=(AlarmManager)getSystemService(ALARM_SERVICE);//获取AlarmManager对象am.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pi);//时间到时,执行PendingIntent,只执行一次//AlarmManager.RTC_WAKEUP休眠时会运行,如果是AlarmManager.RTC,在休眠时不会运行//am.setRepeating(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),10000,pi);//如果需要重复执行,使用上面一行的setRepeating方法,倒数第二参数为间隔时间,单位为毫秒}}

下面写个广播接收器:packagecom.pocketdigi.alarm;importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;publicclassAlarmReceiverextendsBroadcastReceiver{@OverridepublicvoidonReceive(Contextcontext,Intentintent){//TODOAuto-generatedmethodstubSystem.out.println("收到广播");Intentit=newIntent(context,AlarmActivity.class);it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(it);//收到广播后启动Activity,简单起见,直接就跳到了设置alarm的Activity//intent必须加上Intent.FLAG_ACTIVITY_NEW_TASKflag}}

AndroidManifest.xml里加上receiver:

<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.pocketdigi.alarm"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="7"/><applicationandroid:icon="@drawable/icon"android:label="@string/app_name"><activityandroid:name=".AlarmActivity"android:label="@string/app_name"><intent-filter><actionandroid:name="android.intent.action.MAIN"/><categoryandroid:name="android.intent.category.LAUNCHER"/></intent-filter></activity><receiverandroid:name=".AlarmReceiver"><intent-filter><actionandroid:name="cn.pocketdigi.update.alarm"/></intent-filter></receiver></application></manifest>

注册广播接收器receiver,注意android:process,该值是广播进程的名字,貌似可以随便填,不填默认是包名,但是必须填,经真机测试,如果不填,在AlarmManager时间设为过去的时间时,会不停收到广播(死循环)
前面加.或:

2011 �C 2013, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记




更多相关文章

  1. Android(安卓)HttpClient && HttpPost简单使用
  2. Activity状态保存增强版
  3. Android避免反复弹出同一Toast
  4. Android广播接收器(三)
  5. [android]获取各应用的启动次数和运行时间
  6. Android随笔之——闹钟制作铺垫之AlarmManager详解
  7. AndroidAZ系列:四大组件之Broadcast(All,Face)
  8. android中Calendar与Date的区别 转自网络
  9. 关于android中的图片缓冲区问题

随机推荐

  1. Android(安卓)WebView untold stories
  2. Android(安卓)8.0 通知栏的适配
  3. 自定义的水平进度条 layer-list
  4. xml中自定义图形
  5. contentProvider不是线程安全的
  6. Android(安卓)JazzyViewPager
  7. Android(安卓)线性布局 LinearLayout
  8. android中LinearLayout,FrameLayout的对比
  9. android in practice_Using Intents(Good
  10. Android实现Tablayout滑动