android.app.AlarmManager#setWindow ( )源码实例Demo

下面列出了android.app.AlarmManager#setWindow ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: talk-android   文件: Whisper.java
public static void init(final Context context, boolean debugMode) {
    Intent serviceIntent = PushMsgService.startIntent(context, PushMsgService.ACTION_START_SERVICE);
    serviceIntent.putExtra(PushMsgService.EXTRA_DEBUG, debugMode);
    context.startService(serviceIntent);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Daemon.run(context, PushMsgService.class, Daemon.INTERVAL_ONE_MINUTE * 2);
        }
    }, 3000);

    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.setAction(AlarmReceiver.ACTION_ALARM);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, ALARM_REQUEST_CODE,
            intent, PendingIntent.FLAG_UPDATE_CURRENT);
    if (Build.VERSION.SDK_INT >= 19) {
        alarmManager.setWindow(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
                ALARM_REPEAT_INTERVAL, pendingIntent);
    } else {
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
                ALARM_REPEAT_INTERVAL, pendingIntent);
    }
}
 
源代码2 项目: SuntimesWidget   文件: SuntimesWidget0.java
/**
 * Start widget updates; register an alarm (inexactRepeating) that does not wake the device.
 * @param context the context
 */
protected void setUpdateAlarm( Context context, int alarmID )
{
    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    if (alarmManager != null)
    {
        PendingIntent alarmIntent = getUpdateIntent(context, alarmID);
        long updateTime = getUpdateTimeMillis(context, alarmID);
        if (updateTime > 0)
        {
            if (Build.VERSION.SDK_INT < 19) {
                alarmManager.set(AlarmManager.RTC, updateTime, alarmIntent);
            } else {
                alarmManager.setWindow(AlarmManager.RTC, updateTime, 5 * 1000, alarmIntent);
            }
            Log.d(TAG, "setUpdateAlarm: " + utils.calendarDateTimeDisplayString(context, updateTime).toString() + " --> " + getUpdateIntentFilter() + "(" + alarmID + ") :: " + utils.timeDeltaLongDisplayString(getUpdateInterval(), true) );
        } else Log.d(TAG, "setUpdateAlarm: skipping " + alarmID);
    }
}
 
public void scheduleHeartbeat(Context context) {
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);

    int heartbeatMs = GcmPrefs.get(this).getHeartbeatMsFor(activeNetworkPref, false);
    if (heartbeatMs < 0) {
        closeAll();
    }
    logd("Scheduling heartbeat in " + heartbeatMs / 1000 + " seconds...");
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        // This is supposed to work even when running in idle and without battery optimization disabled
        alarmManager.setExactAndAllowWhileIdle(ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + heartbeatMs, heartbeatIntent);
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        // With KitKat, the alarms become inexact by default, but with the newly available setWindow we can get inexact alarms with guarantees.
        // Schedule the alarm to fire within the interval [heartbeatMs/3*4, heartbeatMs]
        alarmManager.setWindow(ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + heartbeatMs / 4 * 3, heartbeatMs / 4,
                heartbeatIntent);
    } else {
        alarmManager.set(ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + heartbeatMs, heartbeatIntent);
    }

}
 
public static void setAlarmTime(Context context, long timeInMillis, Intent intent) {
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    PendingIntent sender = PendingIntent.getBroadcast(context, intent.getIntExtra("id", 0),
            intent, PendingIntent.FLAG_CANCEL_CURRENT);
    int interval = (int) intent.getLongExtra("intervalMillis", 0);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        am.setWindow(AlarmManager.RTC_WAKEUP, timeInMillis, interval, sender);
    }
}
 
/**
 * @param flag            周期性时间间隔的标志,flag = 0 表示一次性的闹钟, flag = 1 表示每天提醒的闹钟(1天的时间间隔),flag = 2
 *                        表示按周每周提醒的闹钟(一周的周期性时间间隔)
 * @param hour            时
 * @param minute          分
 * @param id              闹钟的id
 * @param week            week=0表示一次性闹钟或者按天的周期性闹钟,非0 的情况下是几就代表以周为周期性的周几的闹钟
 * @param tips            闹钟提示信息
 * @param soundOrVibrator 2表示声音和震动都执行,1表示只有铃声提醒,0表示只有震动提醒
 */
public static void setAlarm(Context context, int flag, int hour, int minute, int id, int
        week, String tips, int soundOrVibrator) {
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    long intervalMillis = 0;
    calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get
            (Calendar.DAY_OF_MONTH), hour, minute, 10);
    if (flag == 0) {
        intervalMillis = 0;
    } else if (flag == 1) {
        intervalMillis = 24 * 3600 * 1000;
    } else if (flag == 2) {
        intervalMillis = 24 * 3600 * 1000 * 7;
    }
    Intent intent = new Intent(ALARM_ACTION);
    intent.putExtra("intervalMillis", intervalMillis);
    intent.putExtra("msg", tips);
    intent.putExtra("id", id);
    intent.putExtra("soundOrVibrator", soundOrVibrator);
    PendingIntent sender = PendingIntent.getBroadcast(context, id, intent, PendingIntent
            .FLAG_CANCEL_CURRENT);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        am.setWindow(AlarmManager.RTC_WAKEUP, calMethod(week, calendar.getTimeInMillis()),
                intervalMillis, sender);
    } else {
        if (flag == 0) {
            am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
        } else {
            am.setRepeating(AlarmManager.RTC_WAKEUP, calMethod(week, calendar.getTimeInMillis
                    ()), intervalMillis, sender);
        }
    }
}
 
源代码6 项目: fingerpoetry-android   文件: AlarmManagerUtil.java
public static void setAlarmTime(Context context, long timeInMillis, Intent intent) {
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    PendingIntent sender = PendingIntent.getBroadcast(context, intent.getIntExtra("id", 0),
            intent, PendingIntent.FLAG_CANCEL_CURRENT);
    int interval = (int) intent.getLongExtra("intervalMillis", 0);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        am.setWindow(AlarmManager.RTC_WAKEUP, timeInMillis, interval, sender);
    }
}
 
源代码7 项目: fingerpoetry-android   文件: AlarmManagerUtil.java
/**
 * @param flag            周期性时间间隔的标志,flag = 0 表示一次性的闹钟, flag = 1 表示每天提醒的闹钟(1天的时间间隔),flag = 2
 *                        表示按周每周提醒的闹钟(一周的周期性时间间隔)
 * @param hour            时
 * @param minute          分
 * @param id              闹钟的id
 * @param week            week=0表示一次性闹钟或者按天的周期性闹钟,非0 的情况下是几就代表以周为周期性的周几的闹钟
 * @param tips            闹钟提示信息
 * @param soundOrVibrator 2表示声音和震动都执行,1表示只有铃声提醒,0表示只有震动提醒
 */
public static void setAlarm(Context context, int flag, int hour, int minute, int id, int
        week, String tips, int soundOrVibrator) {
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    long intervalMillis = 0;
    calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get
            (Calendar.DAY_OF_MONTH), hour, minute, 10);
    if (flag == 0) {
        intervalMillis = 0;
    } else if (flag == 1) {
        intervalMillis = 24 * 3600 * 1000;
    } else if (flag == 2) {
        intervalMillis = 24 * 3600 * 1000 * 7;
    }
    Intent intent = new Intent(ALARM_ACTION);
    intent.putExtra("intervalMillis", intervalMillis);
    intent.putExtra("msg", tips);
    intent.putExtra("id", id);
    intent.putExtra("soundOrVibrator", soundOrVibrator);
    PendingIntent sender = PendingIntent.getBroadcast(context, id, intent, PendingIntent
            .FLAG_CANCEL_CURRENT);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        am.setWindow(AlarmManager.RTC_WAKEUP, calMethod(week, calendar.getTimeInMillis()),
                intervalMillis, sender);
    } else {
        if (flag == 0) {
            am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
        } else {
            am.setRepeating(AlarmManager.RTC_WAKEUP, calMethod(week, calendar.getTimeInMillis
                    ()), intervalMillis, sender);
        }
    }
}
 
源代码8 项目: android-job   文件: JobProxy19.java
@Override
protected void plantOneOffInexact(JobRequest request, AlarmManager alarmManager, PendingIntent pendingIntent) {
    long currentTime = System.currentTimeMillis();
    long startMs = currentTime + Common.getStartMs(request);
    long lengthMs = Common.getEndMs(request) - Common.getStartMs(request);

    alarmManager.setWindow(AlarmManager.RTC, startMs, lengthMs, pendingIntent);

    mCat.d("Schedule alarm, %s, start %s, end %s", request,
            JobUtil.timeToString(Common.getStartMs(request)), JobUtil.timeToString(Common.getEndMs(request)));
}
 
源代码9 项目: android-job   文件: JobProxy19.java
@Override
protected void plantOneOffFlexSupport(JobRequest request, AlarmManager alarmManager, PendingIntent pendingIntent) {
    long currentTime = System.currentTimeMillis();
    long startMs = currentTime + Common.getStartMsSupportFlex(request);
    long lengthMs = Common.getEndMsSupportFlex(request) - Common.getStartMsSupportFlex(request);

    alarmManager.setWindow(AlarmManager.RTC, startMs, lengthMs, pendingIntent);

    mCat.d("Scheduled repeating alarm (flex support), %s, start %s, end %s, flex %s", request,
            JobUtil.timeToString(Common.getStartMsSupportFlex(request)), JobUtil.timeToString(Common.getEndMsSupportFlex(request)),
            JobUtil.timeToString(request.getFlexMs()));
}
 
源代码10 项目: JobSchedulerCompat   文件: IdleReceiver.java
@TargetApi(Build.VERSION_CODES.KITKAT)
private static void compatSetWindow(AlarmManager am, int type, long windowStartMillis, long windowLengthMillis, PendingIntent pendingIntent) {
    // Samsung devices have a bug where setWindow() may run before the start time.
    // https://code.google.com/p/android/issues/detail?id=69525
    boolean isShittySamsungDevice = Build.MANUFACTURER.equalsIgnoreCase("samsung");

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && !isShittySamsungDevice) {
        am.setWindow(type, windowStartMillis, windowLengthMillis, pendingIntent);
    } else {
        am.set(type, windowStartMillis, pendingIntent);
    }
}