android 点滴记录
1、AndroidM环境下,在framework层添加代码会对jar包的package name进行检查,并提示”unknown package name of class file”怎么解决?
产生这个报错是因为AndroidM新添加了对framework下jar包的package name检查,解决的方法是在
build/core/tasks/check_boot_jars/package_whitelist.txt
文件中按照规则将新增代码添加到白名单
name检查的逻辑由build/core/tasks/check_boot_jars/check_boot_jars.py脚本实现
这个害我一下午,翻来拂去的找问题。甚至把out目录都删了都不行。 特别手机oem厂商,有时候需要定制,添加jar包就会出这个问题。关键是mm能过。全部编译就不过。
2、输入编辑框中,在一行先输入几个汉字,再输入多个英文字母到换行,在换行的时候,发现最后一个汉字随英文换到下一行怎么解决?
一行文字包括连续的至少两个中文字符和若干个英文字符,在换行的时候,下一行的的开始是从上一行最后两个中文字符中间断开的
举例:
如”汉字abcdefghijklmn”
换行结果是:
“汉
字abcdefghijklmn”//这就会影响正常的中文阅读
这是android 原生设计,最新的代码也是这样设计的。默认把每个汉字字符当作一个换行单元。同时其他的一些特殊符号也是
空格 / -等
都会被当作独立的换行单元实现换行
为了android系统中文使用者的用户习惯,
现在修改成:
可执行自动中英文换行,换行位置是从最后一个中文字符的后面开始,这样的话就不影响正常的中文阅读习惯
修改处在:
frameworks/base/core/java/android/text/StaticLayout.java
(j + 1 >= spanEnd || !Character.isDigit(chs[j + 1 - paraStart]))) ||
((c == CHAR_SLASH || c == CHAR_HYPHEN) &&
(j + 1 >= spanEnd || !Character.isDigit(chs[j + 1 - paraStart]))) ||
(c >= CHAR_FIRST_CJK && isIdeographic(c, true) &&
j < spanEnd && isIdeographic(chs[j - paraStart], false))) {
okWidth = w;
ok = j + 1;
这里的修改其实把换行的开始位置的检测,从start向后面移动了一位
这样修改之后的结果是(参考上述例子):
“汉字
abcdefghijklmn”//做到不影响正常的中文阅读
同样对于CJK(中日韩)这些象形文字字符都会有这个现象
3、如何设置自动获取时区默认开关?
在frameworks/base/packages/SettingsProvider/res/values/defaults.xml文件中,修改如下定义:
true
true为默认开启,false为默认关闭
4、如何设置自动旋转屏幕默认开关?
在frameworks/base/packages/SettingsProvider/res/values/defaults.xml文件中,修改如下定义:
false
true为默认开启,false为默认关闭。
5、如何修改密码解锁最大连续错误输入的密码次数?
使用密码解锁时,连续输入5次错误密码就会弹出警告并锁定输入框不能继续输入密码,并且等待一定的时间之后才能继续输入密码。
下面的修改就可以让用户连续输入10次错误密码之后才弹出警告并锁定输入框而不能输入密码
修改文件frameworks/base/core/java/com/android/internal/widget/LockPatternUtils.java
修改前:
public static final int FAILED_ATTEMPTS_BEFORE_TIMEOUT = 5;
修改后:
public static final int FAILED_ATTEMPTS_BEFORE_TIMEOUT = 10;
值得注意的是,如果修改后测试时使用模块编译进行验证,不仅需要编译该文件所在的模块frameworks/base,还需要编译frameworks/base/packages/Keyguard模块并将这个两个模块编译生成的文件push到对应的目录中去.
6、如何修改密码解锁输入错误密码次数超过限制之后限制输入的时间?
在使用密码解锁的前提下,解锁时输入错误密码次数超过限制时就会限制一段时间不能输入密码
下面的修改就可以让用户连续输入错误密码超时限制之后等待60s后才能再次输入密码
修改文件frameworks/base/core/java/com/android/internal/widget/LockPatternUtils.java
修改前:
public static final long FAILED_ATTEMPT_TIMEOUT_MS = 30000L;
修改后:
public static final long FAILED_ATTEMPT_TIMEOUT_MS = 60000L;
值得注意的是,如果修改后测试时使用模块编译进行验证,不仅需要编译该文件所在的模块frameworks/base,还需要编译frameworks/base/packages/Keyguard模块并将这个两个模块编译生成的文件push到对应的目录中去
7、如何修改图案解锁最小有效连接点个数?
在切换到图案解锁时创建图案解锁密码时至少需要连接的节点个数及进行解锁时输入的有效密码至少需要连接的节点个数默认都为4.
下面的修改就修改图案解锁在创建密码和解锁输入密码时最小连接节点个数,该修改会将最小连接节点个数从4设置为2.
修改文件frameworks/base/core/java/com/android/internal/widget/LockPatternUtils.java
修改前:
public static final int MIN_LOCK_PATTERN_SIZE = 4;
修改后:
public static final int MIN_LOCK_PATTERN_SIZE = 2;
值得注意的是,如果修改后测试时使用模块编译进行验证,不仅需要编译该文件所在的模块frameworks/base,还需要编译frameworks/base/packages/Keyguard模块并将这个两个模块编译生成的文件push到对应的目录中去
8、如何监听屏幕解锁事件?
开发后台服务的时候经常需要对屏幕状态进行判断,如果是想要监听屏幕解锁事件,可以在配置里面注册action为
android.intent.action.USER_PRESENT的广播,则可以监听解锁事件.
1、屏幕解锁时,发送广播的代码:
frameworks\base\packages\keyguard\src\com\android\keyguard\KeyguardViewMediator.java
private static final Intent USER_PRESENT_INTENT =
new Intent(Intent.ACTION_USER_PRESENT)
.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING
| Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
private void sendUserPresentBroadcast() {
final UserHandle currentUser = new UserHandle(mLockPatternUtils.getCurrentUser());
mContext.sendBroadcastAsUser(USER_PRESENT_INTENT, currentUser);
}
2、在应用中注册监听解锁广播:
<receiver android:name="com.home.testscreen.MyReceiver">
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
9、如何禁用滑动解锁的menu解锁功能?
滑动解锁menu解锁功能是android的原生设计,平台4.4的版本已使用代码将该功能禁用,目前平台5.0和5.1的版本尚未禁用该功能。
如果您不想使用该功能可以使用如下修改:
修改文件frameworks/base/packages/Keyguard/res/values/config.xml
- <bool name="config_disableMenuKeyInLockScreen">false</bool>
+ <bool name="config_disableMenuKeyInLockScreen">true</bool>
10、解锁界面触摸锁图标或滑动到某一功能上会有震动反馈,其强度如何调整
修改frameworks\base\packages\keyguard\res\layout\Keyguard_glow_pad_view_uui.xml如下震动时长即可,0是不震动,数值越大震动感越强
- prvandroid:vibrationDuration="20"
+ prvandroid:vibrationDuration="4