2012-05-07 32 views
0

我已經創建了一個按鈕來觸發我的應用程序的脈衝LED動作,但我無法使它永遠脈動。它總是通過值脈衝(在上面的例子中,你會看到脈衝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

多數民衆贊成在那裏觸發LED的脈衝動作的代碼,我使用索尼的外部jar文件,允許我控制LED。我的問題是,我希望脈衝效果在用戶按下按鈕時保持活動狀態,此刻,它會在指定的位置上顯示多少個脈衝。 – SylasF

回答

1

如何使用while循環?您可以將脈衝數設置爲1,並讓它在一個while循環中連續運行,直到滿足某些條件(在您的情況下按下某個按鈕)。

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

Ofcourse這有一個明顯的缺陷,你可以啓動多個並行的服務都試圖LED閃爍一次。但我想你可以在開始下一次迭代之前控制while循環等待服務結束。
編輯:對於等待你的服務的while循環,你將需要在你的服務中添加一些標誌,while循環可以等待。一旦服務完成,標誌可以被設置並且while循環可以移動到下一次迭代,從而給你無限輪次的閃爍,直到按下按鈕。

+0

這聽起來對我來說是一個很好的方法,如果我只會理解如何實現它;)這是我第二週學習和嘗試Java,我從未有過任何編程經驗,所以我可以說我幾乎是一個新手;) – SylasF

+0

你能告訴我更多關於你之前提到的那個國旗嗎? – SylasF

+0

那麼有多種實現方式,這一切都取決於你如何編寫你的服務。基本思想是以某種方式讓while循環知道何時啓動另一個服務(僅在一個服務結束後)。所以你可以有一個全局整數(一個標誌),在服務結束時設置。或者,您可以在您的共享首選項中使用一個整數值作爲標誌。現在等待這個變量,你將需要在第一個while循環中。例如:'while(myFlag){sleep(1000);}'即:如果標誌未設置,則休眠一秒。 – Urban