【问题标题】:How to handle double click from headset hook?如何处理耳机挂钩的双击?
【发布时间】:2015-08-24 07:27:45
【问题描述】:

我想只通过一个耳机按钮来控制我的壁球得分计数器应用程序。这意味着我想检测单击或双击并根据点击次数为第一个或第二个玩家添加分数。

我不能使用长按,而不是双击,因为长按激活 Google Now。

【问题讨论】:

    标签: android double-click headset


    【解决方案1】:

    这是我在音乐播放器中用来处理耳机控制单击和双击的方法。

    static final long CLICK_DELAY = 500;
    static long lastClick = 0; // oldValue
    static long currentClick = System.currentTimeMillis();
    
    @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(Intent.ACTION_MEDIA_BUTTON)) {
    
                KeyEvent keyEvent = (KeyEvent) intent.getExtras().get(Intent.EXTRA_KEY_EVENT);
    
                if (keyEvent.getAction() != KeyEvent.ACTION_DOWN)return;
    
                lastClick = currentClick ;
    
                currentClick = System.currentTimeMillis();
    
                if(currentClick - lastClick < CLICK_DELAY ){
    
                     //This is double click
    
                } else { 
    
                     //This is single click
    
                }
            }
    

    【讨论】:

      【解决方案2】:

      为时已晚,但也许其他人会发现它很有用,点击三次,如 Google 音乐、Spotify 等。

      const val DOUBLE_CLICK_TIMEOUT = 430L
      private var mHeadsetHookClickCounter = 0
      
      override fun onMediaButtonEvent(mediaButtonEvent: Intent?): Boolean {
      
      
          if (Intent.ACTION_MEDIA_BUTTON == mediaButtonEvent?.action) {
      
              val ke = mediaButtonEvent.getParcelableExtra<KeyEvent>(Intent.EXTRA_KEY_EVENT)
      
              if (ke != null && ke.keyCode == KeyEvent.KEYCODE_HEADSETHOOK) {
      
                  if (ke.action == KeyEvent.ACTION_UP) {
      
                      mHeadsetHookClickCounter = min(mHeadsetHookClickCounter+1, 3)
      
                      if (mHeadsetHookClickCounter == 3) {
                          handlingHeadsetClick()
                      } else {
      
      
                          Handler().postDelayed({
      
                              handlingHeadsetClick()
      
                          },  DOUBLE_CLICK_TIMEOUT)
      
                      }
      
      
                  }
      
                  return true
              }
          }
          return super.onMediaButtonEvent(mediaButtonEvent)
      }
      
      
      private fun handlingHeadsetClick() {
      
          logd("MediaSessionSupportFeature Handling headset click")
      
          when(mHeadsetHookClickCounter) {
      
              1 -> { service.get()?.togglePlayPause() }
              2 -> { service.get()?.playNext() }
              3 -> { service.get()?.playPrevious() }
      
          }
      
          // Reset Counter
          mHeadsetHookClickCounter = 0 
      
      
          return
      
      }
      

      【讨论】:

        猜你喜欢
        • 2013-09-04
        • 2014-01-12
        • 1970-01-01
        • 1970-01-01
        • 2011-05-29
        • 1970-01-01
        • 1970-01-01
        • 2013-12-09
        • 2010-10-10
        相关资源
        最近更新 更多