Android14 耳机按键拍照

在相机拍照预览界面 通过耳机按键实现拍照功能

耳机按键定义

frameworks/base/core/java/android/view/KeyEvent.java

cpp 复制代码
public static final int KEYCODE_HEADSETHOOK     = 79;

相机界面 拍照逻辑

DreamCamera2\src\com\android\camera\PhotoModule.java

cpp 复制代码
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (mDataModuleCurrent == null || mActivity.getCameraAppUI().isBottomBarNull())
        return false;
    switch (keyCode) {
        case KeyEvent.KEYCODE_VOLUME_UP:
        case KeyEvent.KEYCODE_VOLUME_DOWN:
        case KeyEvent.KEYCODE_CAMERA:
        case KeyEvent.KEYCODE_ENTER:
		case KeyEvent.KEYCODE_HEADSETHOOK: //添加耳机按键case	,KEYCODE_HEADSETHOOK对应值79	
            int volumeStatus = getVolumeControlStatus(mActivity);
        /*
         * SPRD:fix bug518054 ModeListView is appear when begin to capture using volume
         * key@{
         */
            mActivity.getCameraAppUI().hideModeList();
        /* }@ */
            if (/* mActivity.isInCameraApp() && */mFirstTimeInitialized &&
                    !mActivity.getCameraAppUI().isInIntentReview()) {
            /* SPRD:Bug 535058 New feature: volume */
                if (volumeStatus == Keys.shutter || keyCode == KeyEvent.KEYCODE_CAMERA||keyCode == 79) {//添加耳机按键判断 
                    if (mActivity.hasKeyEventEnter() && (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP)) {
                        if (mHandler.hasMessages(MSG_RESET_KEY_ENTER)) {
                            mHandler.removeMessages(MSG_RESET_KEY_ENTER);
                        }
                        mActivity.resetHasKeyEventEnter();
                        return true;
                    }
                    pressVolumeKey = false;
                    if (mBurstMaxUp && !pressShutterKey){
                        mBurstMaxUp = false;
                        return false;
                    }
                    procOnKeyUpVolumeShutter(keyCode,event);
                    return true;
                } else if (volumeStatus == Keys.zoom) {
                    mUI.hideZoomUI();
                    return true;
                } else if (volumeStatus == Keys.volume) {
                    return false;
                }
            }
            return false;
        case KeyEvent.KEYCODE_FOCUS:
            procOnKeyUpFocus(keyCode,event);
            return true;
    }
    return false;
}
相关推荐
深盾安全2 小时前
Android SO导出符号的深度解析与安全防护指南
android
顾林海2 小时前
Android安全防护:Runtime 调试检测与反制手段
android·安全·面试
什么半岛铁盒2 小时前
MySQL 约束知识体系:八大约束类型详细讲解
android·数据库·mysql
丐中丐9993 小时前
Android系统中如何在Native层调用java实现的系统服务
android·操作系统
stringwu3 小时前
Flutter plugin开发小知识之:ActivityAware 详解
android
whysqwhw3 小时前
Matrix.setPolyToPoly() 函数使用指南
android
丐中丐9993 小时前
在Android中利用抽象类对外提供系统接口
android·操作系统
张可3 小时前
在 Voyager 中使用 SharedElement 共享元素动画
android·前端·kotlin
且随疾风前行.4 小时前
在安卓中使用 FFmpegKit 剪切视频并添加文字水印
android·音视频
Yang-Never4 小时前
设计模式 -> 策略模式(Strategy Pattern)
android·开发语言·设计模式·kotlin·android studio·策略模式