java– 如何在Android onMediaButtonEvent中收听“ACTION_DOWN”(按下键)事件,以便测量时间?

java– 如何在Android onMediaButtonEvent中收听“ACTION_DOWN”(按下键)事件,以便测量时间?,第1张

概述我试着获得时间System.currentTimeMillis(),而不是用户按下媒体按钮.但是当媒体按钮再次上升时执行回调动作==KeyEvent.ACTION_UP.Idon’twanttouseaBroadcastReceiverformysolution.这是我的代码:MediaSessionaudioSession=newMediaSession(getApplicatio

我试着获得时间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”(按下键)事件,以便测量时间?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1101866.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存