2013-09-26 3 views
1

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

Что я делаю неправильно?

ответ

1

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

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

+0

Вы можете найти решение для измерения времени, описанный здесь: http://stackoverflow.com/a/39413753/1386969 Работа с уровня API 21 (Build .VERSION_CODES.LOLLIPOP) – lidox