android 定时关机,定时重启

Android定时关机,定时重启。这个需求主要分为两部分1.定时2.关机/重启。定时直接使用系统的定时服务(AlarmManager);关机/重启虽然系统提供了相应的api,但是该api只对系统级的应用开放,普通的应用无法使用。使用此api需要把app打包成系统应用,因此开关机功能只能在一些定制的系统中使用。

打包成系统应用方式:

1.系统对应的公钥文件platform.pk8和私钥文件platform.x509.pem以及签名工具signapk.jar;

2.将需要打包的apk和第一步里面提到的三个文件放到统一个文件夹下;

3.打开cmd进入第二步里的文件夹下执行命令:java -jar signapk.jar platform.x509.pem platform.pk8 app-release.apk new.apk

如果满足上面的条件就可以轻松实现(定时)关机重启的功能了

关机:

Intent intent = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN");
//是否显示关机提示dialog,true显示false不显示直接关机
intent.putExtra("android.intent.extra.KEY_CONFIRM", true);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

定时关机:

Intent intent = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN");
//是否显示关机提示dialog,true显示false不显示直接关机
intent.putExtra("android.intent.extra.KEY_CONFIRM", true);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

//获取闹钟的id,给定时设置一个随机id,这样可以设置多个定时器,否则会被覆盖掉
int alarmId = getIntRandom();
long intervalMillis = 24 * 3600 * 1000;

PendingIntent pi = PendingIntent.getActivity(MainActivity.this, alarmId, intent, 0);
AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);

//设置重复定时,intervalMillis重复定时的间隔时间。根据自己的需求来设置定时
manager.setRepeating(AlarmManager.RTC_WAKEUP, time, intervalMillis, pi);

//设置一次定时,根据自己的需求来设置定时
//manager.set(AlarmManager.RTC_WAKEUP, time, pi);

重启:

Intent intent=new Intent(Intent.ACTION_REBOOT);
intent.putExtra("nowait", 1);
intent.putExtra("interval", 1);
intent.putExtra("window", 0);
sendBroadcast(intent);

定时重启:

Intent intent = new Intent(Intent.ACTION_REBOOT);
intent.putExtra("nowait", 1);
intent.putExtra("interval", 1);
intent.putExtra("window", 0);

//获取闹钟的id,给定时设置一个随机id,这样可以设置多个定时器,否则会被覆盖掉
int alarmId = getIntRandom();
long intervalMillis = 24 * 3600 * 1000;

PendingIntent pi = PendingIntent.getActivity(MainActivity.this, alarmId, intent, 0);
AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);

//设置重复定时,intervalMillis重复定时的间隔时间。根据自己的需求来设置定时
manager.setRepeating(AlarmManager.RTC_WAKEUP, time, intervalMillis, pi);

//设置一次定时,根据自己的需求来设置定时
//manager.set(AlarmManager.RTC_WAKEUP, time, pi);

//manager.setExact(AlarmManager.RTC_WAKEUP, time, pi);
//set()和setExact()两种方法都是设置定时的,区别在于set()方法定时会有误差而setExact()是精确定时

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值