2012-05-07 2 views
0

Я создал кнопку, чтобы вызвать действие светодиодного импульса на моем приложении, но я не могу заставить его пульсировать навсегда. Он всегда импульсов по значению (на приведенном выше примере вы увидите, что импульсы в 10 раз, а затем останавливается)Есть ли способ сделать это число импульсов бесконечным?

//Button Pulse 
Button bpulse = (Button) findViewById(R.id.bpulse); 
bpulse.setOnClickListener(new View.OnClickListener() { 

public void onClick(View v) { 
    // TODO Auto-generated method stub     
    Intent led = new Intent(IlluminationIntent.ACTION_START_LED_PULSE); 

    led.putExtra(IlluminationIntent.EXTRA_PACKAGE_NAME, "com.devsgonemad.xslc"); 

    led.putExtra(IlluminationIntent.EXTRA_LED_ID, 
        IlluminationIntent.VALUE_BUTTON_2); 

    led.putExtra(IlluminationIntent.EXTRA_LED_NO_OF_PULSES, 10); 

    led.putExtra(IlluminationIntent.EXTRA_LED_PULSE_ON_TIME, 1000); 

    led.putExtra(IlluminationIntent.EXTRA_LED_PULSE_OFF_TIME, 1000); 

    led.putExtra(IlluminationIntent.EXTRA_LED_COLOR, m_ledColor); 

    startService(led); 

    m_isEnabled = true; 
} 

Как я могу сделать этот импульс навсегда, когда кнопка будет нажата до тех пор, пока пользователь не возвращается в приложение и останавливается это от пульсирования?

С уважением

+1

Опубликовать код в вашем сервисе. – FoamyGuy

+0

Где ваш пульсирующий код и в чем проблема, с которой вы столкнулись? –

+0

вот код, который запускает импульсное действие светодиодов, я использую внешний файл jar от Sony, который позволяет мне управлять светодиодами. Моя проблема в том, что я хочу, чтобы эффект Pulse оставался активным, когда пользователь нажимает кнопку, на данный момент он выполняет столько импульсов, как указано выше на указанном. – SylasF

ответ

1

Как насчет использования цикла while? Вы можете указать количество импульсов равным 1, и пусть это выполняется непрерывно в цикле while, пока не будет выполнено какое-либо условие (в вашем случае какая-то кнопка).

while(buttonNotPressed){ 
    led.putExtra(IlluminationIntent.EXTRA_LED_NO_OF_PULSES, 1); 
    startService(led); 
} 

Ofcourse это имеет очевидную ловушку, что вы можете начать много параллельных услуг все пытаются блеснуть светодиод один раз. Но я думаю, вы можете контролировать цикл while, чтобы дождаться окончания службы, прежде чем вы начнете следующую итерацию.
EDIT: для цикла while, ждущего вашего обслуживания, вам нужно добавить какой-то флаг внутри вашей службы, на котором цикл while может подождать. Как только сервис завершится, флаг можно установить, и цикл while может перейти на следующую итерацию, тем самым давая вам бесконечные раунды вспышек, пока не будет нажата кнопка.

+0

Это звучит как хороший метод для меня, если бы я только понял, как его реализовать;) Это моя вторая неделя обучения и попытки Java, у меня никогда не было опыта программирования, поэтому мы можем сказать, что я в значительной степени новичок ;) – SylasF

+0

Не могли бы вы рассказать мне больше об этом флаге, который вы упомянули ранее? – SylasF

+0

Ну, есть несколько способов реализации этого, и все зависит от того, как вы создали свой сервис. Основная идея заключается в том, чтобы каким-то образом цикл while знал, когда начинать другую услугу (только после окончания одной службы). Таким образом, вы можете либо иметь одно глобальное целое число (флаг), которое задается при завершении службы. Или вы можете иметь одно целочисленное значение в своих общих предпочтениях, которые могут действовать как флаг. Теперь, чтобы дождаться этой переменной, вам понадобится еще один цикл внутри первого. Что-то вроде: 'while (myFlag) {sleep (1000);}' i.e: спать на секунду, если флаг не установлен. – Urban