В моем приложении я хочу измерить, как долго нажата кнопка мультимедиа. Я зарегистрировал BroadcastReceiver, что прислушивается к кнопке СМИ печати: (пожалуйста, простите глупые ошибки, как я начинающий ...)Событие кнопки 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 называется и показывает дифференциал:
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));
}
СИБ ue заключается в том, что из того, что я вижу, оба события вызываются одновременно, и когда я отпускаю кнопку, что в конечном итоге заставляет таймер подсчитывать очень короткий период времени (несколько миллисекунд), которые не связаны с продолжительностью, я нажимаю кнопку кнопка.
Что я делаю неправильно?
Вы можете найти решение для измерения времени, описанный здесь: http://stackoverflow.com/a/39413753/1386969 Работа с уровня API 21 (Build .VERSION_CODES.LOLLIPOP) – lidox