该功能的实现逻辑是:在按下音量键后延时3秒执行一个线程,而该线程使用来发送广播,使广播接收者执行上一曲或者下一曲的功能;如果再这3秒内,用户已经弹起按键(不再长按音量键),则取消执行该线程。

修改该功能是在framework/base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java的interceptKeyBeforeQueueing()方法中修改的。以长按音量减键为例:

if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
if (down) {
if (isScreenOn && !mVolumeDownKeyTriggered
&& (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
mVolumeDownKeyTriggered = true;
mVolumeDownKeyTime = event.getDownTime();
mVolumeDownKeyConsumedByScreenshotChord = false;
cancelPendingPowerKeyAction();
interceptScreenshotChord();
}

else if(mSupportSkipSong && !mVolumeDownKeyTriggered
&& (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0){
mVolumeDownKeyTriggered = true;
mVolumeDownKeyTime = event.getDownTime();
cancelPendingPowerKeyAction();


mHandler.postDelayed(mMusicOperationRunnable, MUSIC_OPERATION_DELAY);
}

} else {
if (mSupportSkipSong && mVolumeDownKeyTriggered){
Log.d(TAG,"mVolumeDownKeyTriggered:remove mMusicOperationRunnable!");
mHandler.removeCallbacks(mMusicOperationRunnable);
}


mVolumeDownKeyTriggered = false;
cancelPendingScreenshotChordAction();
}
}


更多相关文章

  1. 游走Android系列之Service
  2. android Handler的使用(二)
  3. Handler机制总结
  4. Flutter Android(安卓)端集成 Bugly 的异常上报和升级功能
  5. android开发之多线程实现方法概述
  6. Android消息机制Handler解析(源码+Demo)
  7. Android用户不想让iOS用户知道的9个杀手性功能
  8. Android(安卓)Handler的详细介绍
  9. Android(安卓)设置无线热点模块隐藏SSID

随机推荐

  1. Android存储数据到本地文件
  2. 【Android】【动画】自定义插值器Interpo
  3. Android(安卓)TextView追加文字
  4. android的几种渲染与裁剪
  5. Android为Notification加上一个进度条
  6. android 如何判断程序是否在前台运行
  7. android登录模块
  8. Managing APN Settings on Google Androi
  9. 【android】 sqliter数据库CRUD
  10. First Preview of Android(安卓)N: Devel