Android7.0 Settings备忘录

Android7.0 Settings备忘录

背景:项目中有个需求,有使用到Android7.0的Settings模块,动态设置(可点击/不可点击)Settings主界面的指纹模块。这个模块之前没有接触过,写点东西记录踩过的坑。

1、Android7.0 Settings模块总览

[link] https://blog.csdn.net/H_Gao/article/details/58201121
相比之前的版本,Android7.0的Settings模块在主界面中增加了侧滑栏,由此也对Settings模块进行了重构。UI侧的代码主要位于/packages/apps/Settings/src/com/android/settings/ 下;framework侧代码主要位于/frameworks/base/packages/SettingsLib/src/com/android/settingslib/下。主界面的滑动由RecyclerView实现,侧滑栏的滑动由ListView实现。

2、Settings重要的类说明

SettingsDrawerActivity:Settings主要的Activity,主界面及侧滑栏的Activity实现。
DashboardContainerFragment:主界面的Fragment实现。
DashboardAdapter:主界面RecyclerView的adapter,ViewItem的点击事件在这个类里实现。
SettingsDrawerAdapter:侧滑栏ListView的adapter。
TileUtils:Settings的分类及Item生成实现。

3、有关指纹

Android自6.0引入指纹,指纹由FingerprintService/FingerprintManager统一管理,FingerprintManager是Framework对上层APP提供接口,FingerprintService是一个系统service,详细可查看API。
在APP侧获取指纹服务的方法:

mFingerprintManager = (FingerprintManager) activity.getSystemService(Context.FINGERPRINT_SERVICE);

在system service中获取指纹服务的方法:

IBinder binder = ServiceManager.getService(Context.FINGERPRINT_SERVICE);
IFingerprintService service = binder == null ? null : IFingerprintService.Stub.asInterface(binder);

4、其他说明

1、Settings ViewItem条目Icon的生成

这些Icon没有直接使用图片生成,使用了Vector DataPath来生成。有关DataPath请参考 [link] https://www.cnblogs.com/yuhanghzsd/p/5466846.html

2、修改Item图标与侧滑栏图标不同步问题

这个问题困扰了比较久,参考[link] https://blog.csdn.net/mr_kings/article/details/78500559

3、踩过的坑

有一个场景,需要删除所有已经录入的指纹,调用fingerprintservice.getEnrolledFingerprints获取所有指纹再依次删除,始终会有指纹被漏删,抛出异常FINGERPRINT_ERROR_CANCELED、FINGERPRINT_ERROR_HW_UNAVAILABLE,没有找到原因。根据代码:
/* Cancel pending enroll or authenticate, sending FINGERPRINT_ERROR_CANCELED to all running clients. Switches the HAL state machine back to the idle state. Unlike enroll_done() doesn't invalidate the pre_enroll() challenge. Function return: 0 if cancel request is accepted or a negative number in case of error, generally from the errno.h set. */
int (*cancel)(struct fingerprint_device *dev);
推测指纹删除这块和HAL的实现有关,没找到解决办法。只能把所有需要使用指纹的地方堵住,规避了这个坑。

谷歌在每个版本的Android码源中都会对既有代码进行优化和重构,也是非常好的学习代码架构的方法。同时,Settings中条目的刷新也是挺复杂的一块,留到以后学习。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值