home键双击灭屏

如果没有physical按键怎么办,有什么方式可以测试吗?当然有,请尝试:
1)adb shell input keyevent xx(键值),效果就如同按下物理按键一样


2)参考NavBar中KeyButtonView,NavBar中的虚拟按键都是采用的这种方式


如果你需要做双击 home key 的检测


你可以参考如下 sample code 自行实现


请修改 phoneWindowManager.Java 的 interceptKeyBeforeQueueing 方法 
找到参考位置后, 加入注释所述代码:


  //以下是原有代码, 即参考行
  if (down && (policyFlags & WindowManagerPolicy.FLAG_VIRTUAL) != 0
                && event.getRepeatCount() == 0) {
            performHapticFeedbackLw(null, HapticFeedbackConstants.VIRTUAL_KEY, false);
        }
  //参考行到此结束
        int result = 0; //原为 int result, 请加入初始值. 
   // mtk sample code for double home click detection BEGIN. 
   //请在类中补充 boolean homeDownDoubleClick = false; 的定义 
  //请在类中补充 long lastHomeDownTime=0; 的定义 
  //请在类中补充 long lastHomeUpTime=0; 的定义 
   //检测原理: 检测上一次按下的 home key 与本次按下的 home key 时间间隔是否 < 500ms  
  //if yes, 则认为是双击 home key  
if(keyCode == KeyEvent.KEYCODE_HOME){
   if(down){
  if(((event.getEventTime() - lastHomeDownTime) < 500)){ 
   homeDownDoubleClick = true; 
  }else{
   homeDownDoubleClick = false;
  }
  lastHomeDownTime = event.getEventTime();
 }else{
  // then home up comes
  Log.d(TAG,"homeDownDoubleClick="+homeDownDoubleClick+",lastHomeDownTime="+lastHomeDownTime+",lastHomeUpTime="+lastHomeUpTime+",this home up="+event.getEventTime());
  if(homeDownDoubleClick && ((event.getEventTime() - lastHomeUpTime) < 500)){ 
   Log.d(TAG,"double click on home detected");
   try {
    IStatusBarService statusbar = getStatusBarService();
    if (statusbar != null) {
     statusbar.preloadRecentApps();
     statusbar.toggleRecentApps();
                }
            } catch (RemoteException e) {
    Slog.e(TAG, "RemoteException when preloading recent apps", e);
                mStatusBarService = null;
   }
     
   result |= ACTION_WAKE_UP;
   return result;
  }
  lastHomeUpTime = event.getEventTime();
 }
}


base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
    private void performKeyAction(int behavior) {
        switch (behavior) {
            case KEY_ACTION_NOTHING:
                break;
            case KEY_ACTION_MENU:
                triggerVirtualKeypress(KeyEvent.KEYCODE_MENU);
                break;
            case KEY_ACTION_APP_SWITCH:
                toggleRecentApps();
                break;
            case KEY_ACTION_SEARCH:
                launchAssistAction();
                break;
            case KEY_ACTION_VOICE_SEARCH:
                launchAssistLongPressAction();
                break;
            case KEY_ACTION_IN_APP_SEARCH:
                triggerVirtualKeypress(KeyEvent.KEYCODE_SEARCH);
                break;
            case KEY_ACTION_LAUNCH_CAMERA:
                launchCameraAction();
                break;
            case KEY_ACTION_SLEEP:
                mPowerManager.goToSleep(SystemClock.uptimeMillis());
                break;
            default:
                break;
        }
    }


3005
5260
MA_UNLOCK = "ma.fprint.match.UNLOCK"


   else if(MA_UNLOCK.equals(intent.getAction())){
Log.i(TAG,"recive broadcast");
keyguardDone(true, true);
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mPM.wakeUp(SystemClock.uptimeMillis());
}
},0);
   }
I/WindowManager( 3883): PhoneWindowManager started!
I/WindowManager( 3883): PhoneWindowManager started! mDoubleTapOnHomeBehavior7
I/WindowManager( 3883): PhoneWindowManager end!
I/PowerManagerService( 3883): Waking up from sleep (uid 1000)...
V/KeyguardServiceDelegate( 3883): onScreenTurnedOn(showListener = com.android.internal.policy.impl.PhoneWindowManager$2@1f9ca05e)
D/DisplayPowerController( 3883): state=2,mScreenOffBecauseOfProximity=false,mProximity-1
I/DisplayPowerController( 3883): Blocking screen on until initial contents have been drawn.




./java/android/provider/Settings.java:         * (Default can be configured via config_doubleTapOnHomeBehavior)
./res/res/values/symbols.xml:  <java-symbol type="integer" name="config_doubleTapOnHomeBehavior" />
./res/res/values/config.xml:    <integer name="config_doubleTapOnHomeBehavior">0</integer>
Start proc 18047:com.silead.fp/1000 for service com.silead.fp/.lockscreen.FpService


/Settings/res/xml/dashboard_categories.xml


interceptKeyBeforeQueueing
} else if (!interactive && shouldDispatchInputWhenNonInteractive()) {
            // If we're currently dozing with the screen on and the keyguard showing, pass the key
            // to the application but preserve its wake key status to make sure we still move
            // from dozing to fully interactive if we would normally go from off to fully
            // interactive, unless the user has explicitly disabled this wake key.
            result = ACTION_PASS_TO_USER;
            isWakeKey = isWakeKey && isWakeKeyEnabled(keyCode);
Log.i(TAG,"PhoneWindowManager end! 5309 isWakeKey" +isWakeKey); true


        if (isWakeKey) {
Log.i(TAG,"PhoneWindowManager end! 5608 isWakeKey" +isWakeKey);
            wakeUp(event.getEventTime(), mAllowTheaterModeWakeFromKey);
        }


wakeUp
    private boolean wakeUp(long wakeTime, boolean wakeInTheaterMode) {


        if (!wakeInTheaterMode && isTheaterModeEnabled()) {
Log.i(TAG,"PhoneWindowManager end! 5926 wakingUp" );
            return false;
        }
Log.i(TAG,"PhoneWindowManager end! 5920 wakingUp" );
        mPowerManager.wakeUp(wakeTime);
        return true;
    }


5283
boolean isWakeKey = (policyFlags & WindowManagerPolicy.FLAG_WAKE) != 0
                || event.isWakeKey();
if (mHomeDoubleTapPending){
mHomeConsumed




if(keyCode == KeyEvent.KEYCODE_HOME){
   if(down){
  // this is home down
  if(((event.getEventTime() - lastHomeDownTime) < 500)){
   homeDownDoubleClick = true;
  }else{
   homeDownDoubleClick = false;
  }
  lastHomeDownTime = event.getEventTime();
 }else{
  // then home up comes
  Log.d(TAG,"homeDownDoubleClick="+homeDownDoubleClick+",lastHomeDownTime="+lastHomeDownTime+",lastHomeUpTime="+lastHomeUpTime+",this home up="+event.getEventTime());
  if(homeDownDoubleClick && ((event.getEventTime() - lastHomeUpTime) < 500)){
   Log.d(TAG,"double click on home detected");
   isWakeKey = false;
  }
  lastHomeUpTime = event.getEventTime();
 }
}
./frameworks/base/core/java/android/view/KeyEvent.java












optimization












./packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java:    // addshowing error dialog start  by sileadinc start
./packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java:    // add showing error dialog by sileadinc end
./packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java:    //add showing error dialog by sileadinc start
./packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java:    //add showing error dialog by sileadinc end
./packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java://add by sileadinc start
./packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java://add by sileadinc end
./packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java:    //add showing error dialog  by sileadinc start
./packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java:    //add showing error dialog by sileadinc end
./packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java:            // add by sileadinc start
./packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java:                    ComponentName component = new ComponentName("com.silead.fp", "com.silead.fp.lockscreen.FpService");
./packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java:                // add by sileadinc end
./packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java~://add by sileadinc start
./packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java~://add by sileadinc end
./packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java~:    //add showing error dialog  by sileadinc start
./packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java~:    //add showing error dialog by sileadinc end
./packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java~:            // add by sileadinc start
./packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java~:                    ComponentName component = new ComponentName("com.silead.fp", "com.silead.fp.lockscreen.FpService");
./packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java~:                // add by sileadinc end


./packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java://add by sileadinc start
./packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java://add by sileadinc end
./packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java:    //add by sileadinc start
./packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java:    //add by sileadinc end
./packages/Keyguard/src/com/android/keyguard/KeyguardViewBase.java:    //add by sileadinc start
./packages/Keyguard/src/com/android/keyguard/KeyguardViewBase.java:    // add by sileadinc end
./packages/Keyguard/src/com/android/keyguard/KeyguardFingerPrintCallback.java://add by sileadinc start
./packages/Keyguard/src/com/android/keyguard/KeyguardFingerPrintCallback.java://add by sileadinc end
./packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java:    //add by sileadinc start
./packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java:    public final static String FINGER_PRINT_UNMATCH_ACTION = "com.silead.fp.lockscreen.action.UNMATCH";
./packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java:    //add by sileadinc end
./packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java:                 //add by sileadinc start
./packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java:                //add by sileadinc end
./packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java:    //add by sileadinc start
./packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java:    //add by sileadinc end
./packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java:            // add by sileadinc start
./packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java:            // add by sileadinc end
./packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java:            //add by sileadinc end
./packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java:        //add by sileadinc start
./packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java:        //add by sileadinc end
./packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java:    //add by sileadinc start
./packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java:    //add by sileadinc end










./services/java/com/android/server/SystemServer.java:                //add by sileadinc start
./services/java/com/android/server/SystemServer.java:        //add by sileadinc end
./services/java/com/android/server/SystemServer.java:    //add by sileadinc start
./services/java/com/android/server/SystemServer.java:        intent.setComponent(new ComponentName("com.silead.fp",
./services/java/com/android/server/SystemServer.java:                    "com.silead.fp.lockscreen.FpService"));
./services/java/com/android/server/SystemServer.java:    //add by sileadinc end
./services/core/java/com/android/server/power/Notifier.java:                // add by sileadinc start:
./services/core/java/com/android/server/power/Notifier.java:                String action = "com.silead.fp.lockscreen.fpservice.ACTION";
./services/core/java/com/android/server/power/Notifier.java:                //intent.setPackage("com.silead.fp.lockscreen");
./services/core/java/com/android/server/power/Notifier.java:                intent.setComponent(new ComponentName("com.silead.fp", "com.silead.fp.lockscreen.FpService"));
./services/core/java/com/android/server/power/Notifier.java:                // add by sileadinc end
./policy/src/com/android/internal/policy/impl/PhoneWindowManager.java:                && isForeground(mContext, "com.silead.fp.setting.EnrollActivity"))) {
./policy/src/com/android/internal/policy/impl/PhoneWindowManager.java:                    + "  fp-isForeground:" + isForeground(mContext, "com.silead.fp.setting.EnrollActivity"));
./policy/src/com/android/internal/policy/impl/PhoneWindowManager.java~:                && isForeground(mContext, "com.silead.fp.setting.EnrollActivity"))) {
./policy/src/com/android/internal/policy/impl/PhoneWindowManager.java~:                    + "  fp-isForeground:" + isForeground(mContext, "com.silead.fp.setting.EnrollActivity"));
grep: ./policy/src/com/android/internal/policy/impl/keyguard: Is a directory
./policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceWrapper.java:        //modified by silead begin
./policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceWrapper.java:       //modified by silead end
grep: ./location: Is a directory



































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值