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;
}
相关推荐
赏金术士1 天前
Compose 教学项目
android·kotlin·compose
晓梦林1 天前
ximai靶场学习笔记
android·笔记·学习
十六年开源服务商1 天前
2026服务器配置优化与WordPress运维实战指南
android·运维·服务器
音视频牛哥1 天前
大牛直播SDK(SmartMediaKit)Android平台Unity3D RTSP/RTMP播放器集成实践
android·unity3d·rtsp播放器·rtmp播放器·unity3d rtmp播放器·安卓unity rtsp播放器·安卓unity rtmp播放器
w1wi1 天前
安卓抓包完全指南(一):从入门到 SSL Pinning 绕过
android·网络协议·ssl
aqi001 天前
一文理清 HarmonyOS 6.0.2 涵盖的十个升级点
android·华为·harmonyos·鸿蒙·harmony
赏金术士1 天前
Jetpack Compose 状态提升(State Hoisting)完全指南
android·kotlin·compose
BoomHe1 天前
git Rebase 为任意一笔提交补上 Change-Id
android·git·android studio
TDengine (老段)1 天前
TDengine 超级表/子表/普通表 — 设计理念与内部表示
android·大数据·数据库·物联网·时序数据库·tdengine·涛思数据