PendingIntent AlarmManager

转载来源: http://blog.csdn.net/geekerparadise/article/details/7787729

一、   PendingIntent:

PendingIntent,顾名思义,是一个延迟意图,也就是说这个意图不确定发出时间,Pendingintent相当于包装了Intent。

通过以下函数中intent的描述可以启动一个Activity、Broadcast、Service,要想启动新的Activity,要设置相应的flag. Intent.FLAG_ACTIVITY_NEW_TASK

  1. getActivity(Context context, int requestCode, Intent intent, int flags)  
  2. getBroadcast(Context context, int requestCode, Intent intent, int flags)  
  3. getService(Context context, int requestCode, Intent intent, int flags)  
getActivity(Context context, int requestCode, Intent intent, int flags)
getBroadcast(Context context, int requestCode, Intent intent, int flags)
getService(Context context, int requestCode, Intent intent, int flags)

二、 AlarmManager:

AlarmManager是一个可访问系统Alarm服务的一个类,在规定的时间内触发,也可以循环触发。

它有几种类型:       

RTC_WAKEUP能唤醒系统,使用的是绝对时间,即System.currentTimeMillis

public staticfinal int RTC_WAKEUP = 0;

RTC不能唤醒系统,使用的是绝对时间,即System.currentTimeMillis

public staticfinal int RTC = 1;

能唤醒系统使用的是相对时间。SystemClock.elapsedRealtime()

public staticfinal int ELAPSED_REALTIME_WAKEUP = 2;

不能唤醒系统,使用的是相对时间。SystemClock.elapsedRealtime()

public static finalint ELAPSED_REALTIME = 3;

在OPhone等一些其他sdk中有这么一个参数POWER_OFF_WAKEUP,它是一个关机闹铃,即使是在关机状态下也能唤醒。


三、   举例说明:

1:定义一个Broadcast,定时显示时间。

  1. package com.jm.notifying;  
  2.   
  3. import java.text.DateFormat;  
  4. import java.text.SimpleDateFormat;  
  5. import java.util.Calendar;  
  6.   
  7. import android.content.BroadcastReceiver;  
  8. import android.content.Context;  
  9. import android.content.Intent;  
  10. import android.widget.Toast;  
  11.   
  12. public class AlarmReceiver extends BroadcastReceiver {  
  13.   
  14.     @Override  
  15.     public void onReceive(Context context, Intent intent) {  
  16.         Calendar now = Calendar.getInstance();  
  17.         DateFormat format = SimpleDateFormat.getTimeInstance();  
  18.         /*定时循环显示当前时间*/  
  19.         Toast.makeText(context, format.format(now.getTime()), Toast.LENGTH_LONG).show();  
  20.     }  
  21. }  
package com.jm.notifying;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class AlarmReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		Calendar now = Calendar.getInstance();
		DateFormat format = SimpleDateFormat.getTimeInstance();
		/*定时循环显示当前时间*/
		Toast.makeText(context, format.format(now.getTime()), Toast.LENGTH_LONG).show();
	}
}

2:Manifest文件中配置:

  1. <receiver android:name=".AlarmReceiver"></receiver>  
<receiver android:name=".AlarmReceiver"></receiver>

3:主界面定义两个按钮,开始和关闭。

  1. package com.jm.notifying;  
  2.   
  3. import android.app.Activity;  
  4. import android.app.AlarmManager;  
  5. import android.app.PendingIntent;  
  6. import android.content.Context;  
  7. import android.content.Intent;  
  8. import android.os.Bundle;  
  9. import android.os.SystemClock;  
  10. import android.view.View;  
  11. import android.view.View.OnClickListener;  
  12. import android.widget.Button;  
  13. import android.widget.Toast;  
  14.   
  15. /** 
  16.  * 启动和停止界面 
  17.  * @author jinmeng 
  18.  * 
  19.  */  
  20. public class AlarmActivity extends Activity {  
  21.     //两个按钮,开始和停止   
  22.     Button start;  
  23.     Button stop;  
  24.     //一个延迟意图   
  25.     PendingIntent operation;  
  26.     @Override  
  27.     protected void onCreate(Bundle savedInstanceState) {  
  28.         super.onCreate(savedInstanceState);  
  29.         setContentView(R.layout.alert_activity);  
  30.         start = (Button) findViewById(R.id.btn1);  
  31.         stop = (Button) findViewById(R.id.btn2);  
  32.         //定义一个Intent用于封装到PendingIntent中   
  33.         Intent launchIntent = new Intent(AlarmActivity.this,AlarmReceiver.class);  
  34.         operation = PendingIntent.getBroadcast(AlarmActivity.this0, launchIntent, 0);  
  35.         //设置时间监听器   
  36.         start.setOnClickListener(listener);  
  37.         stop.setOnClickListener(listener);  
  38.     }  
  39.   
  40.     /** 
  41.      * 根据不同的组件触发不同的事件,并通过AlarmManager来循环打印时间 
  42.      */  
  43.     OnClickListener listener = new OnClickListener() {  
  44.         @Override  
  45.         public void onClick(View v) {  
  46.             //获取AlarmManager实例   
  47.             AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);  
  48.             long interval = 5 * 1000;  
  49.             switch (v.getId()) {  
  50.             case R.id.btn1:  
  51.                 //启动一个循环执行的效果   
  52.                 manager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime()+interval, interval, operation);  
  53.                 break;  
  54.             case R.id.btn2:  
  55.                 //取消执行   
  56.                 Toast.makeText(AlarmActivity.this"Cancel", Toast.LENGTH_LONG).show();  
  57.                 manager.cancel(operation);  
  58.                 break;  
  59.             default:  
  60.                 break;  
  61.             }  
  62.         }  
  63.     };  
  64. }  
package com.jm.notifying;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

/**
 * 启动和停止界面
 * @author jinmeng
 *
 */
public class AlarmActivity extends Activity {
	//两个按钮,开始和停止
	Button start;
	Button stop;
	//一个延迟意图
	PendingIntent operation;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.alert_activity);
		start = (Button) findViewById(R.id.btn1);
		stop = (Button) findViewById(R.id.btn2);
		//定义一个Intent用于封装到PendingIntent中
		Intent launchIntent = new Intent(AlarmActivity.this,AlarmReceiver.class);
		operation = PendingIntent.getBroadcast(AlarmActivity.this, 0, launchIntent, 0);
		//设置时间监听器
		start.setOnClickListener(listener);
		stop.setOnClickListener(listener);
	}

	/**
	 * 根据不同的组件触发不同的事件,并通过AlarmManager来循环打印时间
	 */
	OnClickListener listener = new OnClickListener() {
		@Override
		public void onClick(View v) {
			//获取AlarmManager实例
			AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
			long interval = 5 * 1000;
			switch (v.getId()) {
			case R.id.btn1:
				//启动一个循环执行的效果
				manager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime()+interval, interval, operation);
				break;
			case R.id.btn2:
				//取消执行
				Toast.makeText(AlarmActivity.this, "Cancel", Toast.LENGTH_LONG).show();
				manager.cancel(operation);
				break;
			default:
				break;
			}
		}
	};
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值