android 定时3点重启

需要root权限,放在系统中编译

public static final String ACTION_THREE_CLOCK_REBOOT = "ACTION_THREE_CLOCK_REBOOT";
public static final String ACTION_TIME_SET = "android.intent.action.TIME_SET";
    /**
     * 3 clock
     */
    public void start3Clock(Context context) {
        AlarmManager mg = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent mFifteenIntent = new Intent(ACTION_THREE_CLOCK_REBOOT);
        PendingIntent p = PendingIntent.getBroadcast(context,
                0, mFifteenIntent,PendingIntent.FLAG_UPDATE_CURRENT);
        long systemTime = System.currentTimeMillis();
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, 3);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        long selectTime = calendar.getTimeInMillis();
        /**如果超过今天的3点,那么定时器就设置为明天3点*/
        if (systemTime > selectTime) {
            calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String selectStr = sdf.format(new Date(calendar.getTimeInMillis()));
        Log.i(TAG, "selectStr 3 clock : " + selectStr);
        long clockTime = SystemClock.elapsedRealtime();
        Log.i(TAG, "selectStr 3 clock : " + (clockTime + calendar.getTimeInMillis() - systemTime) / 1000);
        /**RTC_SHUTDOWN_WAKEUP 使用标识,系统进入深度休眠还唤醒*/
        mg.setRepeating(AlarmManager.RTC_SHUTDOWN_WAKEUP,clockTime + calendar.getTimeInMillis() - systemTime,AlarmManager.INTERVAL_DAY,p);
    }

动态广播的注册和接收

private BroadcastReceiver mReceiver;
/**广播初始化*/
private void initReceiver() {
        mReceiver = new MyBroadcastReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction(ACTION_THREE_CLOCK_REBOOT);
        filter.addAction(ACTION_TIME_SET);
        registerReceiver(mReceiver, filter);
}
private void unRegitsterReceiver(){
    unregisterReceiver(mReceiver);
}
/**receiver 内部类*/
class MyBroadcastReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {

            if(TextUtils.equals(action,ACTION_THREE_CLOCK_REBOOT)){ 
            /**重启机子*/   
            reboot();
            } else if (TextUtils.equals(action, ACTION_TIME_SET)) {
            /**修改时间后,重新设置定时器*/
                start3Clock(context)
            }
        }
}

重启机子

public static void reboot() {
        try {
            Log.i(TAG, "reboot");
            Runtime.getRuntime().exec("am start -a android.intent.action.REBOOT");
        } catch (Exception e) {
        }
    }

需要权限

<uses-permission android:name="android.permission.REBOOT"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值