Событие кнопки 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>

BroadReceiver активирует метод в действии (не идеально, но это только для целей тестирования):

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, и показывает разницу:

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));
}

Проблема в том, что из того, что я вижу, оба события вызываются одновременно, когда я отпускаю кнопку, что в конечном итоге заставляет таймер отсчитывать очень короткий период времени (несколько миллисекунд), которые не связаны с продолжительностью, которую я нажимаю кнопка.

Что я делаю не так?


person Geva Tal    schedule 26.09.2013    source источник


Ответы (1)


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

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

person Muzikant    schedule 18.11.2013
comment
Вы можете найти решение для измерения времени, описанное здесь: stackoverflow.com/a/39413753/1386969 Работа с уровнем API 21 (Сборка.VERSION_CODES.LOLLIPOP) - person lidox; 12.09.2016