#android #timer #broadcastreceiver
#Android #таймер #broadcastreceiver
Вопрос:
Я разрабатываю это приложение, где я выполняю сканирование доступных точек доступа. Я должен делать это периодически, секунда за секундой. Я начал делать это с обычной TimerTask, но это не сработало хорошо, потому что это всегда создает новые потоки. Итак, я начал использовать класс handler в 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:
Я предполагаю, что isComplete
устанавливается значение true, поэтому запускаемый режим не переназначается. Я бы предложил переместить Runnable
из метода, а затем добавить перепланирование в метод wifiReceiver
s 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 );
}