1

我想檢測電源按鈕是否在4秒內按下三次。下面的代碼不起作用。Android屏幕開啓和關閉使用電源按鈕處理

public class PowerButtonReceiver extends BroadcastReceiver{ 

    static int count = 0; 
    long initialTime,finishTime; 

    @Override 
    public void onReceive(final Context context, Intent intent) { 

     Log.v("onReceive", "Power button is pressed."); 
     if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
      if (count == 0){ 
       initialTime = System.currentTimeMillis(); 
      } 
      count++; 
      if (count == 3){ 
       finishTime = System.currentTimeMillis(); 

       if (finishTime - initialTime <= 4000){ 
        Toast.makeText(context, "POWER BUTTON CLICKED 3 TIMES", Toast.LENGTH_LONG).show(); 
        count = 0; 
       } 
      } 

     } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 

      if (count == 0){ 
       initialTime = System.currentTimeMillis(); 
      } 
      count++; 
      if (count == 3){ 
       finishTime = System.currentTimeMillis(); 

       if (finishTime - initialTime <= 4000){ 
        Toast.makeText(context, "POWER BUTTON CLICKED 3 TIMES", Toast.LENGTH_LONG).show(); 
        count = 0; 
       } 
      } 
     } 
    } 
    } 

代碼的執行沒有錯誤,它並不顯示敬酒

+0

將你的代碼移動到intentservice,因爲每次按下電源按鈕時都會調用brodcast,所以你的initialTime ,finishTime;復位。使用sharedpreference而不是 –

回答

1
  1. 希望你是動態註冊接收器。
    ACTION_SCREEN_OFF -

    您無法通過艙單申報組件收到此,...

  2. 除以下情形:

    if (finishTime - initialTime <= 4000){ Toast.makeText(context, "POWER BUTTON CLICKED 3 TIMES", Toast.LENGTH_LONG).show(); count = 0; }

沒有別的重 - 將計數分配給0,所以如果你錯過了一次吐司......計數器不會重置在單次運行0併爲<=4000條件以下事件不會進入if,或許您應該重新計數爲0,如果是大於3(?)

  • 如果您的烤麪包在屏幕關閉時出現點擊時出現,則會發生什麼情況 - 不會認爲它會顯示
  • 應該考慮使用||替換if-else,如果您只想檢測電源按鈕事件,則效果會更好屏幕關閉或開啓;像:

    如果(intent.getAction()等於(Intent.ACTION_SCREEN_OFF) || intent.getAction()等於(Intent.ACTION_SCREEN_ON)。){...

  • 如果1。是不是一個問題,目前你的代碼看起來不錯,它是2和3的組合。4.只是一個建議

    +1

    我已經動態註冊了接收器,我很感謝您的建議,並會更新代碼。謝謝。 –