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