
我试着获得时间System.currentTimeMillis(),而不是用户按下媒体按钮.但是当媒体按钮再次上升时执行回调动作== KeyEvent.ACTION_UP.
I don’t want to use a broadcastReceiver for my solution.
这是我的代码:
MediaSession audioSession = new MediaSession(getApplicationContext(), "TAG"); audioSession.setCallback(new MediaSession.Callback() { @OverrIDe public boolean onMediabuttonEvent(final Intent mediabuttonIntent) { String intentAction = mediabuttonIntent.getAction(); if (Intent.ACTION_MEDIA_button.equals(intentAction)) { KeyEvent event = (KeyEvent)mediabuttonIntent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); if (event != null) { int action = event.getAction(); if (action == KeyEvent.ACTION_DOWN) { long stopTimeOfGame_millis = System.currentTimeMillis(); UtilsRG.info("time stopped: " +stopTimeOfGame_millis); } if (action == KeyEvent.ACTION_UP) { long test = System.currentTimeMillis(); UtilsRG.info("time stopped up: " +test); } } } return super.onMediabuttonEvent(mediabuttonIntent); } }); PlaybackState state = new PlaybackState.Builder() .setActions(PlaybackState.ACTION_PLAY_PAUSE) .setState(PlaybackState.STATE_PLAYING, 0, 0, 0) .build(); audioSession.setPlaybackState(state); audioSession.setFlags(MediaSession.FLAG_HANDLES_MEDIA_buttonS | MediaSession.FLAG_HANDLES_TRANSPORT_CONTRolS); audioSession.setActive(true); 日志输出:
time stopped down: 1473420286380
time stopped up: 1473420286383
在我看来,这些价值之间的差异太小了.
解决方法:
我自己解决了这个问题.诀窍是使用event.getDownTime()
以下示例解释了它:
audioSession = new MediaSession(getApplicationContext(), "TAG"); audioSession.setCallback(new MediaSession.Callback() { @OverrIDe public boolean onMediabuttonEvent(final Intent mediabuttonIntent) { String intentAction = mediabuttonIntent.getAction(); if (Intent.ACTION_MEDIA_button.equals(intentAction)) { KeyEvent event = mediabuttonIntent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); if (event != null) { stopTimeOfGame_millis = event.getDownTime(); double usersReactionTime = (event.getDownTime() - startTimeOfGame_millis) / 1000.0; UtilsRG.info("event.getDownTime(): " + usersReactionTime); double getEventTime = (event.getEventTime() - startTimeOfGame_millis) / 1000.0; UtilsRG.info("event.getEventTime(): " + getEventTime); int action = event.getAction(); if (action == KeyEvent.ACTION_DOWN) { long action_down = androID.os.SystemClock.uptimeMillis(); double actionDown = (action_down - startTimeOfGame_millis) / 1000.0; UtilsRG.info("ACTION_DOWN: " + actionDown); } if (action == KeyEvent.ACTION_UP) { long action_up = androID.os.SystemClock.uptimeMillis(); double actionUp = (action_up - startTimeOfGame_millis) / 1000.0; UtilsRG.info("ACTION_UP: " + actionUp); } } } return true; } }); PlaybackState state = new PlaybackState.Builder() .setActions(PlaybackState.ACTION_PLAY_PAUSE) .setState(PlaybackState.STATE_PLAYING, 0, 0, 0) .build(); audioSession.setPlaybackState(state); audioSession.setFlags(MediaSession.FLAG_HANDLES_MEDIA_buttonS | MediaSession.FLAG_HANDLES_TRANSPORT_CONTRolS); audioSession.setActive(true);我得到了以下日志:
event.getDownTime(): 0.281
event.getEventTime(): 0.421
ACTION_DOWN: 0.47
ACTION_UP: 0.471
因此,现在我得到了用户按下键的那一刻.
特别感谢Balkrishna Rawool
总结以上是内存溢出为你收集整理的java – 如何在Android onMediaButtonEvent中收听“ACTION_DOWN”(按下键)事件,以便测量时间?全部内容,希望文章能够帮你解决java – 如何在Android onMediaButtonEvent中收听“ACTION_DOWN”(按下键)事件,以便测量时间?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)