- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在一个非常简单的 Activity 中实现了 onKeyDown 和 onKeyUp,并注意到降低音量键有奇怪的行为。
代码如下:
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN))
{
B9=true;
Log.w("Alon", "Volume_down Down "+SystemClock.elapsedRealtime());
}
else if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP))
{
B10=true;
Log.w("Alon", "Volume_up Down "+SystemClock.elapsedRealtime());
}
else
return super.onKeyDown(keyCode, event);
return true;
}
public boolean onKeyUp (int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN))
{
B9=false;
Log.w("Alon", "Volume_down Up "+SystemClock.elapsedRealtime());
}
else if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP))
{
B10=false;
Log.w("Alon", "Volume_up Up "+SystemClock.elapsedRealtime());
}
else
return super.onKeyDown(keyCode, event);
return true;
}
点击音量调高并尽可能快地放手会产生正确的结果:
12-15 17:43:22.215: W/Alon(751): Volume_up Down 74650325
12-15 17:43:22.265: W/Alon(751): Volume_up Up 74650374
12-15 17:43:22.705: W/Alon(751): Volume_up Down 74650818
12-15 17:43:22.765: W/Alon(751): Volume_up Up 74650878
12-15 17:43:23.566: W/Alon(751): Volume_up Down 74651675
12-15 17:43:23.656: W/Alon(751): Volume_up Up 74651768
12-15 17:43:24.107: W/Alon(751): Volume_up Down 74652222
12-15 17:43:24.177: W/Alon(751): Volume_up Up 74652284
对降低音量做同样的事情不会:
12-15 17:44:13.139: W/Alon(751): Volume_down Down 74701252
12-15 17:44:13.139: W/Alon(751): Volume_down Up 74701253
12-15 17:44:13.840: W/Alon(751): Volume_down Down 74701950
12-15 17:44:13.840: W/Alon(751): Volume_down Up 74701950
12-15 17:44:14.751: W/Alon(751): Volume_down Down 74702863
12-15 17:44:14.761: W/Alon(751): Volume_down Up 74702865
12-15 17:44:15.431: W/Alon(751): Volume_down Down 74703546
12-15 17:44:15.431: W/Alon(751): Volume_down Up 74703547
12-15 17:44:16.673: W/Alon(751): Volume_down Down 74704785
12-15 17:44:16.673: W/Alon(751): Volume_down Up 74704785
我在两部手机(Nexus 4 和 Galaxy S)上进行了测试并得到了相同的结果。这是 Android 中的已知问题吗?我做错了什么吗?
最佳答案
VOLUME_DOWN + POWER_KEY 是触发截图的特殊组合键。
当按下 VOLUME_DOWN 键时,事件在 PhoneWindowManager
派发之前被拦截。
PhoneWindowManager
告诉调度员在调度之前稍等(150 毫秒),以防用户触发屏幕截图……这就是调度员所做的:他等待…… .
...然后 VOLUME_DOWN 键上升。调度程序可以立即调度 VOLUME_DOWN up 事件(即在这种情况下:PhoneWindowManager 没有任何理由告诉调度程序等待)。
但是:队列中有待处理的 VOLUME_DOWN。因此,调度程序在 VOLUME_DOWN 上升之后立即下降 VOLUME_DOWN。
PhoneWindowManager
中的一些代码:
// If we think we might have a volume down & power key chord on the way
// but we're not sure, then tell the dispatcher to wait a little while and
// try again later before dispatching.
if (mScreenshotChordEnabled && (flags & KeyEvent.FLAG_FALLBACK) == 0) {
if (mVolumeDownKeyTriggered && !mPowerKeyTriggered) {
final long now = SystemClock.uptimeMillis();
final long timeoutTime = mVolumeDownKeyTime + SCREENSHOT_CHORD_DEBOUNCE_DELAY_MILLIS;
if (now < timeoutTime) {
return timeoutTime - now;
}
}
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
&& mVolumeDownKeyConsumedByScreenshotChord) {
if (!down) {
mVolumeDownKeyConsumedByScreenshotChord = false;
}
return -1;
}
}
关于android - 按下音量调低会延迟调用 onKeyDown(而音量调高会及时调用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27488119/
我的代码遇到了很大的困难。我正在开发一个显示歌词和和弦的应用程序。我使用两个重叠的textview分隔了和弦和歌词。 我在这个项目中遇到的问题是音高改变功能。我尽我所能向我解释得更好: 和弦总数为12
我有一个游戏并使用 Tune 作为分析库。使用最新的 Unity (5.3.4f1) 并通过 Unity 获取 apk(无 eclipse/android studio)。 我的游戏在 Play 商店
我是一名优秀的程序员,十分优秀!