同时收到MEDIA_BUTTON按钮事件ACTION_DOWN和ACTION_UP

时间:2013-09-26 13:27:51

标签: android broadcastreceiver headset headphones

在我的应用中,我想测量按下媒体按钮的时间。我注册了一个收听媒体按钮的broadcastReceiver :(请原谅我作为初学者的愚蠢错误......)

<receiver android:name="MyRec">
   <intent-filter>
      <action android:name="android.intent.action.MEDIA_BUTTON">
         <action android:name="android.intent.action.MEDIA_BUTTON"/>
      </action>
   </intent-filter>
</receiver>

broadcastReceiver激活活动中的方法(不理想,但这仅用于测试目的):

public void onReceive(Context context, Intent intent) {
   KeyEvent Xevent = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);    
   MainActivity inst = MainActivity.instance();
   if ((Xevent.getAction() == KeyEvent.ACTION_DOWN)){
      inst.startTimer();
      }
   else if ((Xevent.getAction() == KeyEvent.ACTION_UP)) {
      inst.stopTimer();
   }
}

当调用startTimer()时,活动占用系统时间,然后在调用stopTimer时再次占用系统时间并显示diff:

public void startTimer(){
    pressTime = System.currentTimeMillis();
}

public void stopTimer(){
    pressDuration = System.currentTimeMillis() - pressTime;
    TextView timerTextView = (TextView)findViewById(R.id.timerText);
    timerTextView.setText(Long.toString(pressDuration));
}

问题在于,从我看到的两个事件同时被调用,当我放开按钮时,最终使计时器计数的时间非常短(几毫秒)与持续时间我按下按钮。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您不需要使用自己的计时器。收到getDownTime操作后,您可以使用getEventTime参数的eventKeyEvent.ACTION_UP方法。

此外,清单中的嵌套<action android:name="android.intent.action.MEDIA_BUTTON"/>不是必需的