Android Framework 常见问题

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脚本实现

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文件中,修改如下定义:

 <bool name="def_auto_time_zone">true</bool>

true为默认开启,false为默认关闭

4、如何设置自动旋转屏幕默认开关?

在frameworks/base/packages/SettingsProvider/res/values/defaults.xml文件中,修改如下:

 <bool name="def_accelerometer_rotation">true</bool>

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

11丶如何实现安装的应用不显示在Launcher和Settings应用列表中?

PackageManager pm = context.getPackageManager();
pm.setApplicationEnabledSetting(packageName, mState, 0) ;

@pram:packageName就是想要被禁止或者显示的应用包名,可以在data/data下面看到包名

@pram:mState表示需要实现的状态,有两个值:
PackageManager.COMPONENT_ENABLED_STATE_ENABLED // 显示
PackageManager.COMPONENT_ENABLED_STATE_DISABLED // 不显示

注:
1. setApplicationEnabledSetting需要CHANGE_COMPONENT_ENABLED_STATE权限,如果调用进程处于Process.SYSTEM_UID或者root也可以
2. setApplicationEnabledSetting方法第三个参数一般使用0(COMPONENT_ENABLED_STATE_DEFAULT),一般不建议使用1(DONT_KILL_APP)

12丶如何修改应用程序不在最近任务列表中显示,长按Home键或者最近任务按钮键不显示

在相应应用程序的AndroidManifest.xml文件中的activity标签中添加如下属性:

android:excludeFromRecents="true"

比如不需要xxxActivity显示在最近任务列表中:

    <activity
            android:name="xxxActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:excludeFromRecents="true"
            android:theme="@style/AppActivityTheme" >

一些其他默认值
在 \frameworks\base\packages\SettingsProvider\res\values\defaults.xml 文件里定义的开关 如下:

<bool name="def_dim_screen">true</bool> 自动关屏 开
<bool name="def_airplane_mode_on">false</bool> 飞行模式 关
<bool name="def_auto_time">true</bool> 自动适应时间 开

<bool name="def_screen_brightness_automatic_mode">true</bool> 自动亮度调节
<bool name="def_haptic_feedback">false</bool> 触动反馈 关
<bool name="def_bluetooth_on">false</bool> 蓝牙 关
<bool name="def_install_non_market_apps">false</bool> 安装非市场apk 关
<bool name="assisted_gps_enabled">true</bool> gps定位 关
<bool name="def_usb_mass_storage_enabled">true</bool> usb存储模式 开
<bool name="def_wifi_on">false</bool> wifi 关
<bool name="def_backup_enabled">true</bool> 备份 开
<bool name="def_notification_pulse">true</bool> 震动提醒 开
<bool name="def_mount_ums_autostart">false</bool> 自动重启 关
<bool name="def_notifications_use_ring_volume">true</bool> 声音提醒 开
<bool name="def_vibrate_in_silent">true</bool> 无声震动
<bool name="def_device_provisioned">true</bool> 设置提供

<string name="def_time_12_24">24</string> 设置时间格式 24小时制还是12小时制
<integer name="def_screen_off_timeout">60000</integer> 自动关屏幕时间 1分钟

<integer name="def_screen_brightness">216</integer> 屏幕亮度
<integer name="def_network_preference">1</integer> 网络默认选择 第一项
<integer name="def_power_sounds_enabled">1</integer> 低电量声音 开
<integer name="def_lockscreen_sounds_enabled">0</integer> 锁屏声音 关

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值