`

AlarmManager Timer 定时

 
阅读更多

AlarmManager 

 手动设定手机的显示时间,只要大于或者等于AlarmManager 定的下次扫描时间就会触发闹钟

 

重复启动activity;

 

Intent intent = new Intent(context, TestActivity.class);
intent.putExtra("type", type);
PendingIntent pi = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 500, pi);

 

定时启动 :

 

long time = "--------";

Intent intent = new Intent(TestReceiver.ACTION_ACTION);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
				0,  intent , PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager) context
				.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC, time, pendingIntent);

 

取消定时:

 

Intent intent = new Intent(context, TestActivity.class);
intent.putExtra("type", type);
PendingIntent pi = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
alarmManager.cancel(pi);

 

time 重复启动:没隔1秒启动。

    public void time (){
    	startTimeMilin = Calendar.getInstance().getTimeInMillis()+30*60*1000;
    	Timer timer = new Timer ();
    	timer.schedule(new TestTimerTask(), 0, 1000);
    }
    
    class TestTimerTask extends TimerTask{

		@Override
		public void run() {
			
			runOnUiThread(new Runnable() {
				
				public void run() {
					long leftTimesMilin = startTimeMilin-Calendar.getInstance().getTimeInMillis();
					long minitue = leftTimesMilin/1000/60;
					long seconds = leftTimesMilin/1000%60;
					String minStr = "";
					String secdStr = "";
					if (minitue<10) {
						minStr = "0"+minitue;
					}
					else {
						minStr = ""+minitue;
					}
					if (seconds<10) {
						secdStr = "0"+seconds;
					}
					else {
						secdStr = ""+seconds;
					}
					btn.setText(minStr+":"+secdStr);
					if(minitue<=0&&seconds<=0){
						btn.setText("btn");
						isBtnEnable = true;
						if(mTimer!=null){
							mTimer.cancel();
							mTimer = null;
						}
					}
				}
			});
		}
    	
    }

 

定时启动:1秒中后启动,

 

Timer timer2 = new Timer();
    	timer2.schedule(new TimerTask() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				
			}
		},1000);

 

 

 在service中重复启动:

 

Button bt1 = (Button) findViewById(R.id.bt1);
        bt1.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Log.d("test", "___" + isTopActivy());
				ComponentName comp = new ComponentName("com.android.phone",
                "com.android.phone.EmergencyDialer");
					Intent intentM = new Intent();
					intentM.setComponent(comp);
					startActivity(intentM);

				Intent intent = new Intent();
				intent.setClass(PhoneDemoActivity.this, PhoneService.class);
//				intent.setAction(PhoneService.LOCK);
				intent.setAction(PhoneService.LOCK_TIME);
				startService(intent);
			}
		});

 

public class PhoneService extends Service {
	public static final String LOCK = "SET_LOCK" ;
	public static final String CANCEL_LOCK = "CANCEL_LOCK" ;
	LockViewTimerTask task ;
	private Timer timer  ;
	public static final String LOCK_TIME = "TIME_LOCK" ;
	
	@Override
	public IBinder onBind(Intent arg0) {
		return null;
	}

	@Override
	public void onCreate() {
		super.onCreate();
		
		
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
	}

	@Override
	public void onStart(Intent intent, int startId) {
		super.onStart(intent, startId);
		if(intent != null){
			String action = intent.getAction();
			Log.d("test", "action_" + action);
			if(action.equals(LOCK)){
				setAlarm();
				String phoneEm = isTopActivy();
				String pStr = "ComponentInfo{com.android.phone/com.android.phone.EmergencyDialer}" ;
				String lStr = "ComponentInfo{com.phone/com.phone.PhoneDemoActivity}" ;
				String launch2 = "ComponentInfo{com.android.launcher/com.android.launcher2.Launcher}" ;
//				if(phoneEm.equals(launch2)){
				if(phoneEm.equals(pStr) || phoneEm.equals(lStr)){
				
				}else {
					Intent intent2 = new Intent();
					intent2.setClass(this, PhoneDemoActivity.class);
					intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
					startActivity(intent2);
					
				}
				Log.d("test", "!phoneEm.equals(phoneEm)_" + !phoneEm.equals(phoneEm));
				Log.d("test", "!phoneEm.equals(lStr)_" + !phoneEm.equals(lStr));
				Log.d("test", "phoneEm_" + phoneEm);
			}else if(action.equals(CANCEL_LOCK)){
				cancelAlarm();
			}else if(action.equals(LOCK_TIME)){
				setTask();
			}
		}
	}
	private int i = 0;
	private int j = 0;
	
	private void setAlarm(){
		Log.d("test", "setAlarm_" + i++);
		Intent i = new Intent();
		i.setClass(this, PhoneService.class);
		i.setAction(LOCK);
		PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
		AlarmManager alarmMgr = (AlarmManager)getSystemService(ALARM_SERVICE);
		alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis() + 500,500, pi);
	}
	
	private void cancelAlarm(){
		Log.d("test", "cancelAlarm_" + j++);
		Intent i = new Intent();
		i.setClass(this, PhoneService.class);
		i.setAction(LOCK);
		PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
		AlarmManager alarmMgr = (AlarmManager)getSystemService(ALARM_SERVICE);
		alarmMgr.cancel(pi);
	}
	
	/***/
	public String isTopActivy(){
	        ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
	        List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1);
	        String cmpNameTemp = null;

	        if(null != runningTaskInfos){
	                cmpNameTemp = (runningTaskInfos.get(0).topActivity).toString();
//	                Log.e("cmpname","cmpname:"+cmpNameTemp);
	        }

	       return cmpNameTemp;
	}
	
	private void setTask(){
		timer = new Timer();
		task = new LockViewTimerTask();
		timer.schedule(task, 0, 500);
	}
	
	class LockViewTimerTask extends TimerTask{

		@Override
		public void run() {
			String componentInfo = "ComponentInfo{com.android.phone/com.android.phone.EmergencyDialer}";
			String lostInofString = "ComponentInfo{com.phone/com.phone.PhoneDemoActivity}";
			String topA = isTopActivy();
			Log.d("test","__________topA" + topA);
			boolean bn = topA.equals("ComponentInfo{com.android.phone/com.android.phone.EmergencyDialer}") ;
			
			if(topA.equals(componentInfo)){
				
			}else if(topA.equals(lostInofString)){
				timer.cancel();
				task.cancel();
			}else {
				Intent intent = new Intent();
				intent.putExtra("type", 3);
				intent.setClass(PhoneService.this, PhoneDemoActivity.class);
				intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
				startActivity(intent);
				timer.cancel();
				task.cancel();
			}
		}
	}
}

 

分享到:
评论

相关推荐

    Android中AlarmManager+Notification实现定时通知提醒功能

    本文将讲解一下如何使用AlarmManager实现定时提醒功能。 闹钟配置 周期闹钟 Intent intent = new Intent(); intent.setAction(GlobalValues.TIMER_ACTION_REPEATING); PendingIntent sender = PendingIntent....

    实现Push推送demo,用AlarmManager实现全局定时和Timer、TimerTask两种方式分别实现定时服务状态栏消息提醒

    1.实现Push推送demo,用AlarmManager实现全局定时和Timer、TimerTask两种方式分别实现定时服务状态栏Notification消息提醒! 2.该功能经过测试,只需要从服务上定时获取到提醒消息即可,稍做修改,即可使用。 3.可以...

    AlarmManager定时器

    AlarmManager主要依赖于硬件抽象层(HAL)和内核的计时器服务,例如Linux内核的`timer wheel`。当AlarmManager接收到调度请求时,它会将这些请求转化为内核级的定时事件,并由内核在指定时间唤醒CPU执行相应的任务。...

    android定时器Timer实例

    虽然在Android中,我们更倾向于使用`Handler`、`ScheduledExecutorService`或`AlarmManager`来实现定时任务,但了解`Timer`的使用也是有必要的,尤其是对于那些熟悉Java基础的开发者。 `Timer`类的主要方法包括: 1...

    android定时闹钟程序

    在Android中,定时任务通常通过AlarmManager类来实现。AlarmManager是系统服务,可以安排一次性或周期性的任务执行。它的工作原理是发送意图(Intent)到BroadcastReceiver,然后由BroadcastReceiver触发相应的操作...

    Android---Service Timer之执行周期任务

    在Android应用开发中,Service和Timer是两个非常重要的组件,它们可以帮助我们实现后台服务和定时任务的管理。本文将深入探讨如何使用Service和Timer来执行周期性的任务。 Service是Android系统中的一个关键组件,...

    6.2 创建定时和周期任务

    在"TimingDemo"这个例子中,我们可以推测它可能包含了一个或多个上述的定时任务实现,可能通过创建Handler、TimerTask、AlarmManager的实例或者使用WorkManager来演示如何在Android中创建和管理定时和周期任务。...

    Android定时器实现定时执行、重复执行、定时重复执行、定次数执行的多种方式

    * 使用AlarmManager实现定时执行某种功能 * 使用ScheduledExecutorService实现定时执行某种功能 * 使用RxJava实现定时执行某种功能 小结: Android平台中,定时器是实现定时执行、重复执行、定时重复执行、定次数...

    Android源代码定时情景模式切换.zip

    在本项目中,开发者可能使用了AlarmManager来实现定时切换情景模式的功能,因为它可以确保在指定时间点准确触发。 **三、源码分析** 1. **主Activity**:通常包含UI界面,用户可以设置定时器的时间和目标情景模式。...

    android定时器实现每天定时执行任务.rar

    这个场景下,我们可以使用Android的定时器(Timer)或者AlarmManager来实现。本压缩包文件"android定时器实现每天定时执行任务.rar"可能包含了一个示例项目,用于演示如何在Android中设置每日定时任务。 首先,...

    android定时关机

    `Timer`类用于创建和调度任务,而`TimerTask`则代表要定时执行的任务。你可以创建一个`TimerTask`实例,覆盖其`run()`方法以定义执行的动作,然后用`Timer`来安排这个任务的执行时间。 2. **Android权限**: 在...

    Android基于AlarmManager实现用户在线心跳功能示例

    本文实例讲述了Android基于AlarmManager实现用户在线心跳...AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个BroadCast,或者开启一个Service. 下面的代码详细的介绍了两种定时方式的使用: (1)

    android date & timer study

    Android日期和时间处理涉及`Date`、`SimpleDateFormat`(或`DateTimeFormatter`)、`Timer`、`TimerTask`、`Handler`、`Message`、`System.currentTimeMillis()`、`SystemClock.elapsedRealtime()`和`AlarmManager`...

    android中实现计时器的三种方法

    选择哪种方式取决于具体需求,Handler适合简单的定时或延时任务,CountDownTimer适用于倒计时场景,而AlarmManager则适用于需要在后台持续运行的周期性任务。在实际开发中,开发者可以根据项目需求灵活选择和组合...

    Android程序源码--定时器

    但是,Android推荐使用更高效且线程安全的`Handler` 和 `Runnable` 或 `CountDownTimer` 来实现定时任务,因为`Timer`在主线程中运行可能导致UI阻塞。 2. **Handler和Runnable** 在Android中,通常通过创建一个`...

    定时拨打电话程序

    在【压缩包子文件的文件名称列表】中提到的“定时拨打电话app”,通常会包含以下组件:主活动(MainActivity)负责界面展示和用户交互,定时器服务(TimerService)用于后台运行定时任务,权限请求相关的代码...

    Android 计时器

    Android提供了多种计时机制,包括Handler、Timer、CountDownTimer以及AlarmManager等。下面我们将深入探讨这些计时器的工作原理和使用方法。 1. **Handler与Runnable** Handler是Android中处理消息和延迟执行任务...

    Android 定时任务过程详解

    本文将深入探讨Android中三种常见的定时任务实现方式:Handler、Timer以及AlarmManager,并分析它们的适用场景。 首先,我们来看第一种方法:**Handler与线程的sleep(long)方法**。虽然这种方法基于Java的Thread....

Global site tag (gtag.js) - Google Analytics