2022-8-19水一篇文章吧,跟AOSP有关的
开关机动画,这个就不说了,在课程里面已经说到了。
开机Logo,也是比较简单,直接替换就行了。
通常我们会在mk文件里添加复制脚本,根据产品型号去覆盖掉原来的即可。根据型号去变动,在编译时配置好参数,就可以动态去定制不同产品的开机动画,开机logo了。
去掉状态栏,导航栏,下拉通知等
导航栏,下拉通知这些功能其实是在SystemUI里的。
你不用去记哪个目录下,你记得是SystemUI即可。
我们可以查找一下:
那我们如何把它隐藏掉呢?删除吗?
当然不删除。在前面的课程里跟大家说过一个LOCAL_OVERRIDES_PACKAGES +=SystemUI
,按我的习惯,我会创建一个基础的产品mk文件,负责复制一些基础的应用,比如说OTA升级,工厂测试这些。在这个基础上,我根据不同的产品型号去配置是否需要SystemUI即可,如果不需要,我就LOCAL_OVERRIDES_PACKAGES +=SystemUI
,这样子就干掉了。
客户除了提出除了隐藏导航栏,状态栏,还要处理一下顶部往下滑动,把事件广播出去。
这里我就告诉大家,我们平时滑动屏幕边缘的事件是在哪里有处理的。
在PhoneWindowMnager.java
里有处理。
也不用记这个文件在哪里,因为不同的版本不一样,低版本和高版本的位置有点不一样,不过都在frameworks目录下。
同学们按我这个命令查找即可:
打到这佣文件,我们的按键事件
,触摸这里都可以搞到。
这里我只说我们边缘滑动的触摸代码
在init方法里,有这么一段代码:
// monitor for system gestures
mSystemGestures = new SystemGesturesPointerEventListener(context,
new SystemGesturesPointerEventListener.Callbacks() {
@Override
public void onSwipeFromTop() {
//从顶部往下滑动
}
@Override
public void onSwipeFromBottom() {
//从底部往上滑动
}
@Override
public void onSwipeFromRight() {
//从右侧向左滑动
}
@Override
public void onSwipeFromLeft() {
//从左侧望右滑动
}
@Override
public void onFling(int duration) {
}
@Override
public void onDebug() {
}
@Override
public void onDown() {
}
@Override
public void onUpOrCancel() {
}
@Override
public void onMouseHoverAtTop() {
}
@Override
public void onMouseHoverAtBottom() {
}
@Override
public void onMouseLeaveFromEdge() {
}
});
以上代码,即使在全屏界面,你从顶部往下滑动,就会展示状态栏。就是在这里实现的了。比如说我们看一下顶部往下滑动的代码:
if (mStatusBar != null&&TextUtils.isEmpty(isStatusBarShow)) {
requestTransientBars(mStatusBar);
}
修改默认语言
如果你的定制有国内外的产品,通常需要设置默认语言和配置支持什么语言。
PRODUCT_LOCALES := zh_CN zh_TW en_US
PRODUCT_PROPERTY_OVERRIDES += persist.sys.language=zh \
persist.sys.country=CN
在产品的mk文件中配置,比如说以上配置,产品地区为中国大陆,中国台湾,美国。再配置一下默认语言和国家。
这两个属性值在什么时候使用呢?这个如果想知道 的话可以搜一下。
通常来说,在设置的内容提供者初始化的时候,会从xml配置文件里读取一个默认的,如果动态属性中有,就会覆盖掉。优先级是动态配置的比静态的要高。这样子就可以动态修改默认的语言地区了。
修改默认输入法
这个也是经常遇到的定制要求之一。
首先你有一个输入法是吧。先按我步骤来吧,后面再去知道有什么用的即可。
默认输入法是关闭的,需要用户打开。我们添加以下两个配置,当然,不添加也行,直接在java中硬编码。
系统是我们自己的,我们默认就打开默认的输入法。
添加默认配置
我们在配置文件 frameworks/base/packages/SettingsProvider/res/values/defaults.xml
目录下,添加两个配置:
<!-- add by TrillGates -->
<string name="enabled_input_methods" translatable="false">输入法组件</string>
<string name="default_input_method" translatable="false">输入法组件</string>
比如说我用google的作为默认的
<string name="enabled_input_methods" translatable="false">com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME</string>
<string name="default_input_method" translatable="false">com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME</string>
加载默认配置到库中
修改这个文件frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
找到加载配置的地方
loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS, R.string.enabled_input_methods);
loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, R.string.default_input_method);
这两个string就是对应我们前面的默认配置了。
给权限
修改这个文件frameworks/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
grantDefaultSystemHandlerPermissions
这个方法里,照着原有的画就行了
PackageParser.Package cooltekIMEI = getSystemPackageLPr("com.google.android.inputmethod.latin");
if(cooltekIMEI != null && doesPackageSupportRuntimePermissions(cooltekIMEI)){
grantRuntimePermissionsLPw(cooltekIMEI, MICROPHONE_PERMISSIONS, userId);
grantRuntimePermissionsLPw(cooltekIMEI, STORAGE_PERMISSIONS, userId);
grantRuntimePermissionsLPw(cooltekIMEI, CONTACTS_PERMISSIONS, userId);
grantRuntimePermissionsLPw(cooltekIMEI, LOCATION_PERMISSIONS, userId);
grantRuntimePermissionsLPw(cooltekIMEI, CAMERA_PERMISSIONS, userId);
grantRuntimePermissionsLPw(cooltekIMEI, PHONE_PERMISSIONS, userId);
grantRuntimePermissionsLPw(cooltekIMEI, CALENDAR_PERMISSIONS, userId);
}
okay,到这里输入法就有了,编译,刷机,点个输入框验证一下看看。反正我是验证过了。
这篇文章就先水到这里吧,稍后再水一篇前端的。或者我们摸鱼君的登录流程,课程需要。