我尝试获取时间System.currentTimeMillis()
,而不是用户按下媒体按钮。但是,回调在媒体按钮再次上升时执行action == KeyEvent.ACTION_UP
。
我不想在我的解决方案中使用BroadcastReceiver。
这是我的代码:
MediaSession audioSession = new MediaSession(getApplicationContext(), "TAG");
audioSession.setCallback(new MediaSession.Callback() {
@Override
html" target="_blank">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);
日志输出:
时间停止下来:1473420286380
时间停止下来: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
问题内容: 我想侦听诸如+之类的组合键,而不在Swing应用程序的每个组件中添加按键侦听器。我该如何实现? 问题答案: 有可能的。 这将抓住所有关键事件。返回false可使键盘焦点管理器恢复分配给各个组件的常规键事件。 如果您想捕捉按键组合,则可以保留一组“按键”。每当按键被按下时,将其添加到集合中并检查集合中已经有哪些键。释放键后,将其从集中移除。
问题内容: 我正在尝试用Java创建一个简单的Pong游戏,但我不知道如何让两个玩家同时使用键盘。游戏尚不完整,我目前正在为两位玩家进行划桨动作。问题是,当一个玩家按下自己的向上键并向上移动其拨片时,但是如果其他玩家按下其任意键,则会取消先前的玩家动作并导致拨片停止。我想我需要一种同时处理多个键输入的方法。这是我的代码,底部的KeyListeners是我需要帮助的地方。我只有1年的Java程序员,
问题内容: 在不使用焦点侦听技术的情况下,java gui中捕获Tab键的最简单方法是什么? 问题答案: VK_TAB 是制表符常量。 然而: 请参阅:http : //docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html 要解决此问题,请将以下内容应用于触发关键事件的组件(例如,TextArea): 使用此方法,然后必须显
问题内容: 我想绑定以在按下时关闭活动的反应引导弹出窗口。这是代码 但是,当我按任意键时,控制台中都不会记录任何内容。我也尝试在窗口上以及不同情况下使用’keypress’,’keyup’等来收听,但似乎我做错了。 问题答案: 您应该使用而不是。 Keypress通常仅用于根据文档产生字符输出的键 按键 当按下某个键时会触发keypress事件,并且该键通常会产生一个字符值 按键 按下键时会触发k
问题内容: 我是AngularJS的新手,所以请原谅我这个转储问题。 如何收听“点击”或“ ousemove”之类的“ dom”事件? 这就是我得到的(没有错误,但在控制台中也没有结果) //代码基于原始的angularjs-seed。 问题答案: 在AngularJS中,事件通常由指令处理。 指令是教授HTML新技巧的一种方式。在DOM期间,编译指令将与HTML匹配并执行。这允许指令注册行为或转
我想在下面的文本框中捕捉enter键按下事件。为了更清楚地说明这一点,我使用了一个ng repeat来填充tbody。以下是HTML: 这是我的模块: 我正在使用资源填充表格,我的控制器代码是: