MTKAndroid12-13-实现WIFI-蓝牙默认打开-自动旋转屏幕管理默认关闭-屏幕超时默认30分钟-屏幕旋转方向

MTK Android12-13默认设置优化

提示:自定义QSPanel 中,WIFI-蓝牙默认打开-自动旋转屏幕管理默认关闭 功能;要求设置里面默认息屏时间为30分钟


前言

一般的定制化产品有自定义下拉框开关默认状态的需求、设置默认息屏时间的需求。 这里以MTK Android12 13 为例说明

一、需求

  • 默认WIFI、蓝牙、自动旋转屏幕 开关默认打开
  • 默认 设置里面息屏时间默认为30分钟

默认打开蓝牙、 WIFI 常见需求,那么为什么默认关闭自动旋转? 有很多固定方向无Sensor 常见,开机固定某个方向常见。所有有这方面需求。

如下实现效果:
在这里插入图片描述
在这里插入图片描述

二、参考资料:

自己以前笔记相关资料参考:
Android 系统属性添加篇

其它相关联资料参考:
Android系统设置默认值大全
Android系统开发 Android10版本各种默认设置
SettingsProvider defaults.xml 修改默认值数据及更新数据
Setting学习(五)-默认设置值加载及修改
Android Settings 数据库生成、监听与默认值配置

二、修改文件

\vendor\mediatek\proprietary\packages\apps\SettingsProvider\res\values\defaults.xml

三、实现方案

修改路径:\vendor\mediatek\proprietary\packages\apps\SettingsProvider\res\values\defaults.xml 中的参数默认值

 <integer name="def_screen_off_timeout">1800000</integer>
 <bool name="def_bluetooth_on">true</bool>
 <bool name="def_wifi_on">true</bool>
 <bool name="def_accelerometer_rotation">false</bool>

四、源码分析

假使已经对属性、系统数据库SettingsProvider 已经有所了解,对SystemUI已经有所了解,那么对于这个功能其实就是非常简单的一件事。 这里从一定的经验和实际案例来引导,介绍一些知识点。

1、系统属性加载-插入-初始化地方

参考Android 系统属性添加篇 中,介绍了属性的默认地方地方。我们在 \vendor\mediatek\proprietary\packages\apps\SettingsProvider\res\values\defaults.xml 默认的值,最终都是以数据库形式存放于数据库中,如下:
数据初始化类:frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

在这里插入图片描述

2、SettingsProvider 数据提供者数据-默认配置

默认配置数据文件:\vendor\mediatek\proprietary\packages\apps\SettingsProvider\res\values\defaults.xml
其实好多配置名称都是见名知意 的
在这里插入图片描述

下面用表格列举,后续对照参考有用:

value含义key
def_dim_screen0=no 1=yes:是否让屏幕亮度渐渐变暗Settings.System.DIM_SCREEN
def_screen_off_timeout无操作多少秒后灭屏Settings.System.SCREEN_OFF_TIMEOUT
def_sleep_timeout无操作多少秒后休眠(该值要比灭屏时间长,因为在休眠之前会先灭屏)Settings.Secure.SLEEP_TIMEOUT
def_airplane_mode_on飞行模式是否默认开启Settings.Global.AIRPLANE_MODE_ON
def_theater_mode_on剧场模式是否默认开启Settings.Global.THEATER_MODE_ON
def_airplane_mode_radios开启飞行模式时会关掉的开关列表(通常会包括蓝牙,wifi,nfc等)Settings.Global.AIRPLANE_MODE_RADIOS
airplane_mode_toggleable_radios飞行模式下用户可以手动开启的开关列表Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS
def_auto_time1=yes, 0=no是否从网络自动同步日期、时间、时区Settings.Global.AUTO_TIME
def_auto_time_zone1=yes, 0=no是否从网络自动同步时区Settings.Global.AUTO_TIME_ZONE
def_accelerometer_rotation1=yes, 0=no是否开启自动旋转(即是否根据加速度传感器旋转屏幕方向)Settings.System.ACCELEROMETER_ROTATION
def_screen_brightness屏幕默认亮度(取值区间为0–255) Settings.System.SCREEN_BRIGHTNESS
def_screen_brightness_automatic_mode是否开启屏幕亮度的自动调节Settings.System.SCREEN_BRIGHTNESS_MODE
def_window_animation_scale1=yes, 0=no窗口动画缩放Settings.System.WINDOW_ANIMATION_SCALE
def_window_transition_scale1=yes, 0=no窗口透明度Settings.System.TRANSITION_ANIMATION_SCALE
def_haptic_feedback是否开启触摸反馈,不清楚什么含义
def_bluetooth_on0=disabled. 1=enabled.默认是否开启蓝牙Settings.Global.BLUETOOTH_ON
def_wifi_display_on0=disabled. 1=enabled.是否开启wifi显示Settings.Global.WIFI_DISPLAY_ON
def_install_non_market_apps是否允许安装不是在应用市场下载的app:1 = 允许通过安装包安装,0 = 不允许通过安装包安装Settings.Secure.INSTALL_NON_MARKET_APPS
def_package_verifier_enable在安装app之前进行证书检查,1审查,0不审查Settings.Global.PACKAGE_VERIFIER_ENABLE
def_location_providers_allowed是否开启gps,若字符串为null则默认不开启gps,还需借助LOCATION_MODE进行判断Settings.Secure.LOCATION_PROVIDERS_ALLOWED
assisted_gps_enabled是否开启辅助的gps应用Settings.Global.ASSISTED_GPS_ENABLED
def_netstats_enabled是否开启流量统计Settings.Global.NETSTATS_ENABLED
def_usb_mass_storage_enabled是否开启usb海量存储Settings.Global.USB_MASS_STORAGE_ENABLED
def_wifi_onwifi默认是否开启Settings.Global.WIFI_ON
def_wifi_sleep_policywifi是否休眠(会和移动网络来回切换)取值为0-never, 1-only when plugged in, 2-always Settings.Global.WIFI_SLEEP_POLICY
“def_networks_available_notification_on”是否通知用户打开网络“Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON”
def_backup_enabled0-disabled, 1-enabled是否开启设置备份Settings.Secure.BACKUP_ENABLED
def_backup_transport用于备份或者恢复的传输文件Settings.Secure.BACKUP_TRANSPORT
def_notification_pulse当有通知来时,led灯是否要重复闪烁Settings.System.NOTIFICATION_LIGHT_PULSE
def_mount_play_notification_snd当有事件来临时是否播放通知铃声Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND
def_mount_ums_autostart是否自动启动主机检测系统Settings.Secure.MOUNT_UMS_AUTOSTART
def_mount_ums_prompt是否在主机检测时显示通知Settings.Secure.MOUNT_UMS_PROMPT
def_mount_ums_notify_enabled当开启ums时是否显示通知Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED
def_power_sounds_enabled电量过低时是否铃声通知Settings.Global.POWER_SOUNDS_ENABLED
def_low_battery_sound低电量时播放的铃声文件来源Settings.Global.LOW_BATTERY_SOUND
def_dock_sounds_enabled当插拔电源时是否播放声音Settings.Global.DOCK_SOUNDS_ENABLED
def_desk_dock_sound插上电源时播放的音频文件Settings.Global.DESK_DOCK_SOUND
def_desk_undock_sound拔下电源时播放的音频文件Settings.Global.DESK_UNDOCK_SOUND
def_car_dock_sound使用车载电源充电时播放的音频文件Settings.Global.CAR_DOCK_SOUND
def_car_undock_sound当从车载电源拔下时播放的音频文件Settings.Global.CAR_UNDOCK_SOUND
def_lockscreen_sounds_enabled当解锁或是锁屏时是否播放声音Settings.System.LOCKSCREEN_SOUNDS_ENABLED
def_lock_sound锁屏时播放的音频文件Settings.Global.LOCK_SOUND
def_unlock_sound解锁时播放的音频文件Settings.Global.UNLOCK_SOUND
def_trusted_sound在未解锁的情况下设备进入到可信任状态时播放的音频文件Settings.Global.TRUSTED_SOUND
def_wireless_charging_started_sound开启无线充电时播放声音Settings.Global.WIRELESS_CHARGING_STARTED_SOUND
def_lockscreen_disabled第一次开机时默认不锁屏(若要彻底去掉锁屏页面还需要在别的方法中设置Settings.System.LOCKSCREEN_DISABLED
def_device_provisioned设备是否已经被配置(该参数考虑的时多用户不同时刻使用同一个设备的情况)Settings.Global.DEVICE_PROVISIONED
def_dock_audio_media_enabled使用dock音频输出媒体Settings.Global.DOCK_AUDIO_MEDIA_ENABLED
def_vibrate_in_silent静音模式下是否允许震动Settings.System.VIBRATE_IN_SILENT
def_accessibility_script_injection是否增强js的屏幕阅读性Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION
def_accessibility_speak_password访问模式下是否语音播报密码Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD
def_low_battery_sound_timeout当经过一定时间后,如果低电量提醒为播放声音,则灭屏Settings.Global.LOW_BATTERY_SOUND_TIMEOUT
def_lock_screen_show_notifications是否在锁屏界面显示通知Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS
def_lock_screen_allow_private_notifications允许在锁屏界面上显示私有通知,就像是解锁状态下一样Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS
def_wifi_scan_always_available设置-wlan-高级-随时扫描开关Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE

3、SystemUI各个QSTItle 开关面板是怎么赋值并监听属性值

首先自身必须了解一下SystemUI基本机制,是怎么监听数据和赋值的。 加入你不太懂 SystemUI,建议补充一下基础点:

SystemUI 相关资料参考

基于上面的思路,这里给出以前对SystemUI 分析的部分参考资料,目的是你自己要搞清楚SystemUI架构,这个架构跟平台和版本关系不大,基本架构要熟悉。

谷歌开源项目,SystemUI基础必备

谷歌安卓开源项目SystemUI Remind
谷歌安卓开源项目SystemUI doc文档
Dragger 使用
Qs-Titles

以上官方资料其实介绍很详细了,看完后还是模棱两可很正常,建议多看几遍,品味品味流程,跟进代码。
下面是部分其它自己认为写的比较好的博客或者专题,可以借鉴看看。 建议多看几遍,理解更为透彻了,然后跟一下代码流程,收获会是巨大的。

其它文章推荐

SystemUI 架构分析
深入理解SystemUI
SystemUI下拉框自定义(Android9.0)
SystemUI栏目(MTK平台)
SystemUI专题一
SystemUI专题二

源码查询平台

SystemUI源码查询

部分源码分析-监听-获取属性值-开关状态同步

就是通过provider 实现监听的,都是属性值监听与获取,如下:
在这里插入图片描述
在这里插入图片描述

五、延伸知识点-MTK屏幕方式设置

需求:屏幕方向问题跟装机、模具方向息息相关,所以对于屏幕方向有自己的要求,那么默认多少、旋转多少 需要知道如何修改。
参考文档:MTK-Android13-假横屏-竖屏开机解决各类APP USB相机适配问题

核心知识点如下: 修改uboot/kernel/Android 物理旋转方向

修改文件路径如下:

修改文件:
/vendor/mediatek/proprietary/bootable/bootloader/lk/project/k69v1_64_k419.mk
修改内容:
MTK_LCM_PHYSICAL_ROTATION = 270   # 这里根据自身旋转角度,进行修改为对应的角度值

修改文件:
/kernel-4.19/arch/arm64/configs/k69v1_64_k419_defconfig
修改内容:
CONFIG_MTK_LCM_PHYSICAL_ROTATION="270"   # 这里根据自身旋转角度,进行修改为对应的角度值

修改文件:
/device/mediateksample/k69v1_64_k419/ProjectConfig.mk
修改内容:
MTK_LCM_PHYSICAL_ROTATION = 0   # 这里根据自身旋转角度,进行修改为对应的角度值

在这里插入图片描述
在这里插入图片描述

总结

这个需求 其实就是两个知识面:

  • 系统属性、数据库属性、SettingProvider 的配置、初始化默认值
  • 对于SystemUI QSTitle 赋值、监听开关相关知识点

提醒:

  • 假使已经知道 \vendor\mediatek\proprietary\packages\apps\SettingsProvider\res\values\defaults.xml 中去配置默认值远远不够的, 实际开发中遇到各种问题,比如配置了默认值并不生效 很常见。实际上要找加载地方;
  • SystemUI 一定是核心知识点
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野火少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值