android AlarmManager 的相關應用

本文详细介绍了如何使用Android AlarmManager API 实现应用内的定时任务,包括设置固定时间间隔的周期性操作,例如在120秒后每60秒调用一次特定服务。同时,还展示了如何根据设定的时间表(如每天特定时间)进行周期性任务调度。通过设置自定义的AlarmManager,开发者可以灵活地安排应用内部的任务执行,提高应用的自动化程度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AlarmManager 可以設置固定時間,固定周期性的操作

120秒後每60秒調用一次UpdateService:

 private void setAlarmTime(){
        Slog.i("TEST", "Start self-define alarm");
        currentSystemTime = System.currentTimeMillis();
        try {
            nextCheckAlarmTime = Long.parseLong(Settings.System.getString(mSystemContext.getContentResolver(), Settings.System.KEY_NEXT_CHECK_TIME));
        }catch (Exception e){
            e.printStackTrace();
        }
        manager = (AlarmManager) mSystemContext.getSystemService(ALARM_SERVICE);
        Intent intent = new Intent();
        intent.setComponent(new ComponentName("com.android.settings","com.android.settings.system.UpdateService"));
        pi = PendingIntent.getService(mSystemContext,0,intent,0);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
            if (nextCheckAlarmTime - currentSystemTime > 0) {
                manager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 120 * 1000 + SystemClock.elapsedRealtime(), 600 * 1000, pi);
            } else {
                Intent intentSerive = new Intent();
                intentSerive.setComponent(new ComponentName("com.android.settings", "com.android.settings.system.UpdateService"));
                mSystemContext.startService(intentSerive);
                setAlarmChange();
            }
            Slog.i("TEST", "End self-define alarm");
        }
    }

每天(或是周期性)固定的時間進行調用UpdateService的操作:

private void setAlarmChange(){
        Slog.i(TAG, "Start self-define alarm");
        manager = (AlarmManager) mSystemContext.getSystemService(ALARM_SERVICE);
        Intent intent = new Intent();
        intent.setComponent(new ComponentName("com.android.settings","com.android.settings.system.UpdateService"));
        pi = PendingIntent.getService(mSystemContext,0,intent,0);
        timedate = Settings.System.getString(mSystemContext.getContentResolver(),Settings.System.KEY_CHECK_TIME_VALUE);
        dayset = Integer.parseInt(Settings.System.getString(mSystemContext.getContentResolver(), Settings.System.KEY_UPDATE_INTERVAL))+1;
        temptimedate = timedate.split(":");
        hourset = temptimedate[0];
        mintuesset = temptimedate[1];
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hourset));
        calendar.set(Calendar.MINUTE, Integer.parseInt(mintuesset));
        calendar.add(Calendar.DATE,dayset);
        nextCheckAlarmTime = calendar.getTimeInMillis()+dayset*3600*24*1000;
        Settings.System.putString(mSystemContext.getContentResolver(),Settings.System.KEY_NEXT_CHECK_TIME,String.valueOf(nextCheckAlarmTime));
                // setRepeating() lets you specify a precise custom interval--in this case,
        manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                dayset*3600*24*1000, pi);
        Slog.i(TAG, "Start self-define alarm");
    }

記得開啓Alarmagr前先清除之前的對象

private void cancelAlarmTime(){
        if(manager!=null)
        manager.cancel(pi);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值