public class CallEvent extends BroadcastReceiver{
public LEDController ledController = new LEDController();
public ApplicationSettings applicationSettings = new ApplicationSettings();
public boolean ring = false;
@Override
public void onReceive(Context context, Intent intent){
if(intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)){
ring = true;
blink();
}else if(intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_IDLE) ||
intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
ring = false;
}
}
public void blink(){
Runnable r = new Runnable() {
@Override
public void run() {
while(ring){
ledController.turnOnFlash();
try {
Thread.sleep(applicationSettings.getDelayOn());
} catch (InterruptedException e) {
e.printStackTrace();
}
ledController.turnOffFlash();
try {
Thread.sleep(applicationSettings.getDelayOff());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread blinkThread = new Thread(r);
blinkThread.start();
}
}Остановить поток в андроида приложения
Я хочу создать во главе гонца, когда телефон звонит. Но я не могу остановить blinkThread. Я не знаю, что это не работает. Начал старт, когда доход от звонков, но не прекращается, когда происходит снижение звонка. Переменное кольцо меняется на «false», когда отклонение вызова, но поток все еще работает
Возможно, вы не хотите использовать отдельную нить для этого, так как это замедляет работу телефона и потребляет дополнительную энергию аккумулятора. Вместо этого вы можете посмотреть этот ответ (http://stackoverflow.com/a/10207775/1659409), чтобы узнать, как вы могли это сделать. Когда вы больше не хотите мигать, вы просто устанавливаете флаг, чтобы не отправлять задачу снова. –
использовать сервис для этого ... радиопередатчик не должен иметь собственную нить ... но вы можете начать сервис ... тогда вы можете отправить намерение прекратить мигать – Selvin
вы используете blinkThread.interrupt(); ? – Paul