События кнопки MEDIA_BUTTON ACTION_DOWN и ACTION_UP получены одновременно

В моем приложении я хочу измерить, как долго было нажатие кнопки мультимедиа. Я зарегистрировал широковещательный приемник, который прослушивает нажатие кнопки мультимедиа: (прошу прощения за глупые ошибки, поскольку я новичок...)

<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 ответ

Решение

Вам не нужно использовать свои собственные таймеры. Вы можете использовать getDownTime а также getEventTime методы event параметр при получении KeyEvent.ACTION_UP действие.

Кроме того, вложенные <action android:name="android.intent.action.MEDIA_BUTTON"/> в вашем манифесте не требуется

Другие вопросы по тегам