【问题标题】:How to countdown till a future day in an android application?如何在android应用程序中倒计时到未来的一天?
【发布时间】:2014-04-04 20:47:30
【问题描述】:

我想向我的应用程序添加一个新的未来,它在 textView 中显示到特定日期的剩余天数、我设置的日期以及每天过去后要更改的 textView。我尝试了很多东西,一个 serched 比很多,但到目前为止什么都没有。

我从这里开始:

CountDownTimer countDown = new CountDownTimer(3000,1000) {

        @Override
        public void onTick(long millisUntilFinished) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onFinish() {
            // TODO Auto-generated method stub

        }
    };
    countDown.start();

非常感谢!!!

【问题讨论】:

  • 您是否尝试了可运行并设置了您要等待的时间?
  • 我只是不知道如何显示天数,我只能显示日期直到倒计时必须计数。有问题,怎么显示天数?
  • 有没有用户打开应用一整天!!! :\
  • 他在问是否有可能会有用户让你的应用整天打开

标签: android countdown days


【解决方案1】:

好吧,我很久以前就为一个小部件做过类似的事情,所以只需查看下面的代码,如果有任何不清楚的地方,请告诉我。它可能不是 100% “正确”,因为那是我开始为 Android 编写代码的时候,但它应该给你一个想法......

    private static final long MILLIS_IN_DAY = 24 * 60 * 60 * 1000;
    private static final long MILLIS_IN_HOUR = 60 * 60 * 1000;
    // ...


    Time awaitedTime = new Time();
    awaitedTime.set(second, minute, hour, day, month, year);

    Time defaultTime = new Time();
    defaultTime.set(0, 0, 0, 1, 7, 1989);

    if (awaitedTime.toMillis(false) == defaultTime.toMillis(false)) {

        return "No date";
    }
    else {

        int tempRest = 0;

        Time currentTime = new Time();
        currentTime.setToNow();

        long remainingTime = awaitedTime.toMillis(false) - currentTime.toMillis(false);
        int remainingDays = (int) (remainingTime / MILLIS_IN_DAY);

        tempRest = (int) (remainingTime % MILLIS_IN_DAY);
        int remainingHours = (int) (tempRest / MILLIS_IN_HOUR);

        // return YOUR STRING HERE
    }

【讨论】:

  • 什么不是很清楚:defaultTime.set(0, 0, 0, 1, 7, 1989); - 指现在的时间?如果我是对的,这几天应该如何设置? ,然后,如何设置它应该计算多少天?谢谢!
  • 那个defaultTime的东西只是让我检查一下我从互联网上下载的时间是否真的存在等等。至于其余的,看看最后几行 - 没错那里。基本上,您将当前时间和等待时间转换为毫秒,然后查看它们之间的差异。然后,以毫秒为单位的差异除以 24 小时内的毫秒数,得到您想要的时间。顺便说一句:“设置”是一个不规则动词,它的过去时也是“设置”(即不是“设置”):)
  • 我不明白你关于转换时间的想法。你不能请编辑你的帖子并给我一个剩下77天的例子吗?谢谢!
  • 时间 timeCurrent = new Time(); timeCurrent.setToNow();时间 timeAwaited = new Time(); timeAwaited.set(77 * MILLIS_IN_DAY); long millisNow = timeCurrent.toMillis(false); long millisYour = timeAwaited.toMillis(false);恐怕我不能让它比这更简单。不知道你现在是什么时候,但这很简单——如果我是你,我会花一些时间来弄清楚;如果是晚上,也许可以尝试在早上试一试......
  • 但是你用什么方法让它工作,我应该把我的 textView id 放在哪里?
【解决方案2】:

我只是不知道如何显示天数,我只能显示 倒计时之前的日期将不得不计数。有问题,怎么解决 显示天数?

我建议你使用JodaTime

Days.daysBetween(new LocalDate(start), new LocalDate(end)).getDays() 

关于更新:

你为什么不只更新 onResume() 中的剩余天数。当用户在午夜使用您的应用程序时,您真的要涵盖这种情况吗?:)

如果是这种情况,您可以使用 AlarmManager。这是草稿:

AlarmManager manager = Context.getSystemService(Context.ALARM_SERVICE);

Intent intent = new Intent(this, UpdateDaysReceiver.class);
PendingIntent pi=PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

manager.setRepeating (int type, long triggerAtMillis, 24*60*60*1000, pi)

您可以在 UpdateDaysReceiver 中处理更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    相关资源
    最近更新 更多