7

我有这个方法

public void GetSMS(){
       //in this method I read SMS in my app inbox,
       //If have new SMS create notification
}

为此,我认为创建计时器滴答方法并每 5 秒调用一次 GetSMS()

我怎样才能为此创建一个正确的方法?

4

5 回答 5

18

这是一个定时器和定时器任务的例子。希望这可以帮助。

final Handler handler = new Handler();
Timer timer = new Timer(false);
TimerTask timerTask = new TimerTask() {
    @Override
    public void run() {
        handler.post(new Runnable() {
            @Override
            public void run() {
                // Do whatever you want
            }
        });
    }
};
timer.schedule(timerTask, 1000); // 1000 = 1 second.
于 2013-01-18T06:41:07.083 回答
5

也许有一个计时器和一个计时器任务?

请参阅 javadocs: http ://docs.oracle.com/javase/1.4.2/docs/api/java/util/Timer.html

然而接收广播可能是一个更可靠的解决方案。请参阅:Android - SMS 广播接收器

于 2013-01-17T16:53:04.973 回答
5

使用Timer.scheduleAtFixedRate()如下:

final Handler handler = new Handler();
Timer timer = new Timer(false);
TimerTask timerTask = new TimerTask() {
    @Override
    public void run() {
        handler.post(new Runnable() {
            @Override
            public void run() {
                GetSMS();
            }
        });
    }
};

timer.scheduleAtFixedRate(timerTask, 5000, 5000); // every 5 seconds.
于 2016-07-26T13:55:01.743 回答
1

我偶然看到它..这不是正确的方法..

您无需检查是否收到了短信。Android 提供广播接收器以在收到短信时收到通知。

给你,你有链接在这里..复制粘贴,它会很好用

http://androidexample.com/Incomming_SMS_Broadcast_Receiver_-_Android_Example/index.php?view=article_discription&aid=62&aaid=87

希望这是有道理的

于 2014-05-28T06:54:00.767 回答
1

尽管上述计时器方法是使用您所追求的那种计时器的正确方法,但我非常喜欢这个小技巧:

new CountDownTimer(Long.MAX_VALUE, 5000)
{
    public void onTick(long millisUntilFinished)
    {
        // do something every 5 seconds...
    }

    public void onFinish()
    {
       // finish off when we're all dead !
    }
}.start();

Long.MAX_VALUE根据 Java 文档,有一个(签名的)值2^63-1,大约是 292471 千年!因此,相对而言,有效地启动其中一个倒数计时器会永远持续下去。当然这取决于你的间隔时间。如果您希望每 1 秒有一个计时器,则计时器将“仅”持续 58494 千年,但在更宏大的计划中我们不需要担心这一点。

于 2017-01-27T10:34:20.337 回答