广播接收器安卓的计时器

时间:2011-05-24 03:43:42

标签: android timer broadcastreceiver

我正在开发此应用程序,我正在扫描可到达的接入点。我必须在第二秒之后才进行周期性的。 我开始使用普通的timerTask来做这件事,但它没有很好地工作,因为它是alaways创建新线程。所以,我开始在android中使用处理程序类并调用postDelayed方法来安排扫描!就像这样:

protected void setTimer()
    {
        final long elapse = 100;
        Runnable t = new Runnable() {
            public void run()
            {

        Log.i(TAG3, "startedScan"); 
        IntentFilter filter = new    IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        registerReceiver(wifiReceiver, filter);

        wifiManager.startScan();

                if( !isComplete )
                {
                    mHandler.postDelayed( this, elapse );
                }
            }
        };
        mHandler.postDelayed( t, elapse );
    }   

问题是扫描只运行了3次然后再也没有运行了......我找不到解决办法!我怎么解决这个问题?

1 个答案:

答案 0 :(得分:2)

我猜测isComplete被设置为true,因此Runnable没有被重新安排。我建议将Runnable移出方法,然后将重新安排添加到wifiReceiver onReceive方法。

Runnable t = new Runnable() {
    public void run()
    {
        Log.i(TAG3, "startedScan"); 
        IntentFilter filter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        registerReceiver(wifiReceiver, filter);
        wifiManager.startScan();
    }
};

protected void setTimer()
{
    final long elapse = 100;
    mHandler.postDelayed( t, elapse );
}