Android4.0 实现组合键重启手机

受Android4.0 组合键KEY_POWER+KEY_VOLUME_DOWN截屏功能启发,

实现组合键KEY_POWER+KEY_VOLUME_UP重启手机。


修改文件:

$(ANDROID_ROOT)\frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java

方法public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags, boolean isScreenOn)中:
共修改两处;

第一处:

// Handle special keys.         switch (keyCode) {             case KeyEvent.KEYCODE_VOLUME_DOWN:             case KeyEvent.KEYCODE_VOLUME_UP:             case KeyEvent.KEYCODE_VOLUME_MUTE: {                 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 {                         mVolumeDownKeyTriggered = false;                         cancelPendingScreenshotChordAction();                     }                 } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {                     if (down) {                     //Modified here to reboot device start                         if (!mVolumeUpKeyTriggered                                 && (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {                             mVolumeUpKeyTriggered = true;                             mVolumeUpKeyTime = event.getDownTime();                             if(interceptRebootDevice()){                             return 0;                             }                                                          if(isScreenOn){                             cancelPendingPowerKeyAction();                                 cancelPendingScreenshotChordAction();                             }                         }                         //Modified here to reboot device end                     } else {                         mVolumeUpKeyTriggered = false;                         cancelPendingScreenshotChordAction();                         cancelPendingRebootDeviceAction();                     }                 }

*********************************************************************************************

第二处:

case KeyEvent.KEYCODE_POWER: {
                result &= ~ACTION_PASS_TO_USER;
                if (down) {
                	//Modified here to reboot device start.
                    if (!mPowerKeyTriggered
                            && (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
                        mPowerKeyTriggered = true;
                        mPowerKeyTime = event.getDownTime();
                        if(interceptRebootDevice()){
                        	return 0;
                        }
                        if(isScreenOn){
                        	interceptScreenshotChord();
                        }
                    }
                    //Modified here to reboot device end.


新增的变量及方法:

private long mVolumeUpKeyTime;

/**
     * Added by shihaijun for reboot devices without reason.
     */
    private boolean interceptRebootDevice(){
    	Log.d(TAG,"_______________enter inteceptRebootDevice_________");
    	if(mPowerKeyTriggered && mVolumeUpKeyTriggered && !mVolumeDownKeyTriggered){
    		final long now = SystemClock.uptimeMillis();
    		if(now <= mVolumeUpKeyTime + SCREENSHOT_CHORD_DEBOUNCE_DELAY_MILLIS
    				&& now <= mPowerKeyTime + SCREENSHOT_CHORD_DEBOUNCE_DELAY_MILLIS){
    			Log.d(TAG,"_______________Reboot Device after "+ViewConfiguration.getGlobalActionKeyTimeout()+"______");
    			mVolumeUpKeyConsumedByRebootDevice = true;
    			cancelPendingPowerKeyAction();

                mHandler.postDelayed(mRebootDeviceLongPress,
                        ViewConfiguration.getGlobalActionKeyTimeout());
                return true;
    		}
    	}
    	return false;
    }
    
    /** Added by shihaijun to reboot device*/
    private Runnable mRebootDeviceLongPress = new Runnable() {
		public void run() {
			// TODO Auto-generated method stub
			try {
    			Power.reboot(null);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
		}
	};
    
	private void cancelPendingRebootDeviceAction(){
		mHandler.removeCallbacks(mRebootDeviceLongPress);
	}




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值