1

我所有的代码都在计时器中,每 2 秒计时一次

我有 3 个不同的时间

1) 来自时间选择器( sTime) 的时间。
2)获取我手机的当前时间(cTime)。
3) Expiry Time - (用于在时间选择器的时间和到期时间之间创建范围)(rTime)。

我想在等于或之后使我的手机静音,并在cTime等于或之后将sTime 我的手机配置文件恢复正常cTimerTime

但我无法做到这一点。我已经完成了编码,我认为逻辑很好,但为什么它不起作用。请在这方面帮助我。

这是我的代码

AudioManager am;
am = (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE);

try {
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");

    String savedTime = sHour + ":" + sMin;
    Date sTime = sdf.parse(savedTime);

    Calendar c = Calendar.getInstance();
    int currentHour = c.get(Calendar.HOUR);
    int currentMin = c.get(Calendar.MINUTE);
    String currentTime = currentHour + ":" + currentMin;

    Date cTime = sdf.parse(currentTime);

    int rangeHour = sHour;
    int rangeMin = sMin + 1;

    Date rTime = sdf.parse(rangeHour + ":" + rangeMin);

    if (cTime.after(sTime)) {
        am.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
        Log.e("res", "Silent Mode Timing");
    }

    if (cTime.after(rTime)) {
        am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
        Log.e("res", "Normal Mode Timing");
    }
} catch (Exception ex) {
    Log.e("res", ex.toString());
}
4

2 回答 2

1

好的,我有一个建议。Date 类的方法 'after' 以毫秒为单位比较两个 long 值。当您获得当前时间毫秒值时,它会计算为当前年份 + 当前月份 + 当前日期和小时等(或类似的东西)。当你得到毫秒的 savedTime 时,它​​计算不正确,因为你没有指定完整的日期(年份等)。我的意思是你 startTime 在 Date.after 方法中以长毫秒值转换时不正确。尝试更改您的算法以使用长时间戳,而不是使用日期。例如当前时间是 System.currentTimeMillis()。我希望它有所帮助。对不起我的英语不好

于 2016-05-18T03:28:02.317 回答
0

好的,尝试使用这样的东西:

private void compareTime(final String year, final String day, final String hour, final String month, final String minutes) {
    AudioManager am;
    am = (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE);
    final SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:dd:mm:yy");
    final String savedTimeValue = hour + ":" + minutes + ":" + day + ":" + month + ":" + year;
    try {
        final Date savedDate = sdf.parse(savedTimeValue);
        final long savedTime = savedDate.getTime();
        final long currentTime = System.currentTimeMillis();
        final long rangeTimeMilliseconds = 1 * 60 * 1000; // 1 minute in milliseconds
        if (currentTime > savedTime) {
            am.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
        }
        if (currentTime > rangeTimeMilliseconds) {
            am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
        }

    }catch(Exception e) {
        e.printStackTrace();
    }
}
于 2016-05-23T04:00:47.890 回答