В моем приложении я хочу измерить, как долго длилось нажатие кнопки мультимедиа. Я зарегистрировал широковещательный приемник, который прослушивает нажатие кнопки мультимедиа: (извините за глупые ошибки, поскольку я новичок...)
<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));
}
Проблема в том, что из того, что я вижу, оба события вызываются одновременно, когда я отпускаю кнопку, что в конечном итоге заставляет таймер отсчитывать очень короткий период времени (несколько миллисекунд), которые не связаны с продолжительностью, которую я нажимаю кнопка.
Что я делаю не так?