已解决
Mr.Alright---MTK安卓13 抬手亮屏功能的逻辑
来自网友在路上 161861提问 提问时间:2023-10-24 15:19:22阅读次数: 61
最佳答案 问答题库618位专家为你答疑解惑
该功能在系统设置-显示-拿起设备时唤醒
alps\vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\display\LiftToWakePreferenceController.javapublic boolean isAvailable() {SensorManager sensors = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);return sensors != null && sensors.getDefaultSensor(Sensor.TYPE_WAKE_GESTURE) != null;
}
通过以上代码可以控制该功能是不是在设置中显示,也可以看出来用到的sensor是Sensor.TYPE_WAKE_GESTURE,当然这个sensor是需要驱动配置好之后,上层才可以正常的控制该功能的开启和关闭。
alps\frameworks\base\core\java\android\hardware\SensorManager.javapublic Sensor getDefaultSensor(int type) {// TODO: need to be smarter, for now, just return the 1st sensorList<Sensor> l = getSensorList(type);boolean wakeUpSensor = false;// For the following sensor types, return a wake-up sensor. These types are by default// defined as wake-up sensors. For the rest of the SDK defined sensor types return a// non_wake-up version.if (type == Sensor.TYPE_PROXIMITY || type == Sensor.TYPE_SIGNIFICANT_MOTION|| type == Sensor.TYPE_TILT_DETECTOR || type == Sensor.TYPE_WAKE_GESTURE|| type == Sensor.TYPE_GLANCE_GESTURE || type == Sensor.TYPE_PICK_UP_GESTURE|| type == Sensor.TYPE_LOW_LATENCY_OFFBODY_DETECT|| type == Sensor.TYPE_WRIST_TILT_GESTURE|| type == Sensor.TYPE_DYNAMIC_SENSOR_META || type == Sensor.TYPE_HINGE_ANGLE) {wakeUpSensor = true;}for (Sensor sensor : l) {if (sensor.isWakeUpSensor() == wakeUpSensor) return sensor;}return null;
}alps\frameworks\base\services\core\java\com\android\server\policy\WakeGestureListener.javapublic abstract void onWakeUp();public boolean isSupported() {synchronized (mLock) {return mSensor != null;}
}public void requestWakeUpTrigger() {synchronized (mLock) {if (mSensor != null && !mTriggerRequested) {mTriggerRequested = true;mSensorManager.requestTriggerSensor(mListener, mSensor);}}
}public void cancelWakeUpTrigger() {synchronized (mLock) {if (mSensor != null && mTriggerRequested) {mTriggerRequested = false;mSensorManager.cancelTriggerSensor(mListener, mSensor);}}
}alps\frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.javaclass MyWakeGestureListener extends WakeGestureListener {MyWakeGestureListener(Context context, Handler handler) {super(context, handler);}@Overridepublic void onWakeUp() {synchronized (mLock) {if (shouldEnableWakeGestureLp()) {performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, false,"Wake Up");wakeUp(SystemClock.uptimeMillis(), mAllowTheaterModeWakeFromWakeGesture,PowerManager.WAKE_REASON_GESTURE, "android.policy:GESTURE");}}}
}
关键的方法是onWakeUp(),这个方法就是抬手的动作触发的操作,如果我们要在抬手的时候处理一些事情,那么可以在这个方法里面操作。
@Override
public void onWakeUp() {synchronized (mLock) {if (shouldEnableWakeGestureLp()) {performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, false,"Wake Up");wakeUp(SystemClock.uptimeMillis(), mAllowTheaterModeWakeFromWakeGesture,PowerManager.WAKE_REASON_GESTURE, "android.policy:GESTURE");}// Add on 2023/4/10 for startif ((SystemProperties.getInt("ro.xxx_support", 0) == 1|| SystemProperties.getInt("ro.xxx_support", 0) == 1)&& Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.LIFT_ON, 1) == 1) {Log.d("HZH", "PhoneWindowManager MyWakeGestureListener onWakeUp 890: open vicescreen");Intent intent = new Intent();intent.setComponent(new ComponentName("com.xxx.xxx", "com.xxx.xxx.XService"));intent.putExtra("broadcast_type", 109);mContext.startForegroundService(intent);}// Add on 2023/4/10 for end}
}
l流程比较简单,主要是给大家提供一个思路,如果有抬手相关的需求的时候,相信是会有帮助的
查看全文
99%的人还看了
相似问题
- 频剪辑软件Corel VideoStudio 会声会影2024最新7大新全新功能解析
- 最新AIGC创作系统ChatGPT系统源码,支持最新GPT-4-Turbo模型,支持DALL-E3文生图,图片对话理解功能
- 【UE】用样条线实现测距功能(下)
- 10个容易被忽视的FastAPI实用功能
- 测试用例的设计方法(全):正交实验设计方法|功能图分析方法|场景设计方发
- 3.生成验证码 + 开发登录、退出功能 + 显示登录信息
- SMART PLC累计流量功能块(梯形积分法+浮点数累加精度控制)
- 多协议数据库管理软件 Navicat Premium 16 mac中文版功能
- 当前系统并无桌面环境,或无显示器,无法显示远程桌面,您需要自行安装X11桌面环境,或者使用终端文件功能
- .NET 主流 ORM 功能介绍 大全 最新
猜你感兴趣
版权申明
本文"Mr.Alright---MTK安卓13 抬手亮屏功能的逻辑":http://eshow365.cn/6-23435-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!