События кнопки 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"/>
в вашем манифесте не требуется