`

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();
			}
		}
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics