Android SystemUI相关定制(七)

按键相关

1、长按电源键关机、重启文案修改

ShutdownThread.java --->showShutdownDialog()方法中红色方框里修改

 

资源文件在:framework/base/core/res/res/valuexxx/strings.xml

framework/base/core/res/res/values/symbols.xml声明自己的变量,如下:

<java-symbol type="string" name="power_reboot "/>

或者

运行命令:make framework 2>&1 | sed -n -f MakeJavaSymbols.sed | sort -u 

使用这个命令将会列出所有新增的私有资源,将它们拷贝到symbols.xml中即可。

2、音量+/-长按功能,禁麦健区分单击和双击修改
禁键单击和双击:Framework/base/services/core/java/com/android/server/policy/PhoneWindowManager.javainterceptKeyBeforeQueueing方法中修改(代码仅供参考)
private long volumeDownTime = 0L;
private long volumeUpTime = 0L;
private long headSetHookDownTime = 0L;
private int headSetHookDownNum = 0;
private long headSetHookIntervalTime = 0L;
private HeadSetHookRunnable mHeadSetHookRunnable;

private class HeadSetHookRunnable implements Runnable {
    private int keyCode = -1;
    public HeadSetHookRunnable(int keyCode) {
        this.keyCode = keyCode;
    }
    @Override
    public void run() {
        Intent intent = new Intent(ACTION_KEYCODE);
        intent.putExtra("keyCode", keyCode);
        intent.putExtra("headSetHookType", "HEADSETHOOK_FIRST_CLICK");
        mContext.sendBroadcastAsUser(intent, UserHandle.ALL);     
// 单击
        headSetHookDownNum = 0;
        headSetHookIntervalTime = 0;
        mHeadSetHookRunnable = null;
    }
};
case KeyEvent.KEYCODE_VOLUME_MUTE:{
    result &= ~ACTION_PASS_TO_USER;
    if (down) {
        headSetHookDownTime = SystemClock.uptimeMillis();
    } else {
        if (SystemClock.uptimeMillis() - headSetHookDownTime >= ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout()) {
            // long press
            headSetHookDownNum = 0;
            headSetHookIntervalTime = 0;
            mHeadSetHookRunnable = null;
        } else {
            if (mHeadSetHookRunnable == null) {
                mHeadSetHookRunnable = new HeadSetHookRunnable(keyCode);
            }
            if (headSetHookDownNum == 1
                    && SystemClock.uptimeMillis() - headSetHookIntervalTime < 400) {
                // double click
                Intent intent = new Intent(ACTION_KEYCODE);
                intent.putExtra("keyCode", keyCode);
                intent.putExtra("headSetHookType", "HEADSETHOOK_DOUBLE_CLICK");
                mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
                mHandler.removeCallbacks(mHeadSetHookRunnable);
                mHeadSetHookRunnable = null;
                headSetHookDownNum = 0;
                headSetHookIntervalTime = 0;
            } else {
                mHandler.removeCallbacks(mHeadSetHookRunnable);
                mHandler.postDelayed(mHeadSetHookRunnable, 400);
                headSetHookDownNum++;
            }
        }
        headSetHookIntervalTime = SystemClock.uptimeMillis();
    }
    break;
}
音量+/-长按:Framework/base/services/core/java/com/android/server/policy/PhoneWindowManager.javainterceptKeyBeforeDispatching方法中修改(代码仅供参考)
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP
       || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
        || keyCode == KeyEvent.KEYCODE_VOLUME_MUTE) {
    if (mUseTvRouting || mHandleVolumeKeysInWM) {
        // On TVs or when the configuration is enabled, volume keys never
        // go to the foreground app.
        dispatchDirectAudioEvent(event, false);
        return -1;
    }
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { 
        if (down) {
            if (SystemClock.uptimeMillis() - volumeDownTime >= 50) {
                Intent intent = new Intent(ACTION_KEYCODE);
                intent.putExtra("keyCode", keyCode);
                mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
                volumeDownTime = SystemClock.uptimeMillis();
            }
        }
    } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
        if (down) {
            if (SystemClock.uptimeMillis() - volumeUpTime >= 50) {
                Intent intent = new Intent(ACTION_KEYCODE);
                intent.putExtra("keyCode", keyCode);
                mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
                volumeUpTime = SystemClock.uptimeMillis();
            }
        }
    }
    // If the device is in Vr mode, drop the volume keys and don't
    // forward it to the application/dispatch the audio event.
    if (mPersistentVrModeEnabled) {
        return -1;
    }
} else if (keyCode == KeyEvent.KEYCODE_TAB && event.isMetaPressed())

注意:音量+/-长按修改,需要在interceptKeyBeforeQueueing中的

case KeyEvent.KEYCODE_VOLUME_DOWN:

     break; case KeyEvent.KEYCODE_VOLUME_UP:

    break;

result &= ~ACTION_PASS_TO_USER;去掉

——————————————————————————————————————————-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值