基于回调接口的确权机制

基于回调接口的确权机制

一  背景

    随着移动互联网的飞速发展,手机应用越来越丰富,在应用安装运行的同时,它们就拥有了一些搜集手机数据的权限,在丰富我们生活的同时个人的隐私也随之有可能遭到泄露,在我们不觉察中,大量的应用在抓取着我们在互联网上的消费信息和消费习惯,那如何避免个人的过多信息遭到泄露呢?安卓系统从4.4开始引入了权限管理机制。

    所谓权限管理,就是能够手动配置某个 App 的权限,进而阻止恶意软件以及防止隐私泄漏。当然,更进一步的权限管理,是能够在 App 动态使用某个权限的时候,提供一直通知机制提示用户允许和拒绝。这样的权限管理就更加类似于 Windows 中的主动防御。

    目前安卓默认的权限管理方法是:检测应用操作权限请求,构造一个AlertDialog对象供用户选择,用户有三种选择,允许,拒绝和忽略,安卓设备根据用户的选择来决定应用此次操作的权限,要么允许此次操作,要么阻止此次操作,要么忽略。这种弹框机制不但与我们OS5.0系统风格不符,而且会造成多个AlertDialog堆积在一起,用户要一个个至上而下地确权,不能一目了然地看到系统当前所有的权限申请。

    在我公司项目P680上采用了基于回调接口的新的确权机制,用自定义的view代替了系统采用的AlertDialog,新机制能大大改善用户体验,符合OS5.0 风格。

  

 二 基本内容

    当应用有权限请求时,权限管理服务会通过Binder调用到SystemUI中注册的回调接口,回调接口构造一个自定义的view 对象并呈现给用户,用户确权后通过Binder将确权结果传给权限管理服务。权限管理管理服务进而将结果返回给申请权限的客户端,客户端根据确权结果做来继续以下的流程。

    所有的权限请求以自定义的View显示,自定义View以List的形式通过状态栏弹出,能让用户一览无余,随意选择对哪个请求操作作出回应。而不是原生状态那种机械化地按顺序操作。

 

 三  详细阐述

    安卓设备构造状态栏PhoneStatusBar时,实例化一个自定义的View对象PermissionsCheckPanelView,该对象代表着权限申请提示框。同时该View对象又是CheckPermissionCallback类的一个成员变量。

    通过IOnCallbackAddRequest接口类将AppOpsService和CheckPermissionCallback连接起来,当有权限请求操作时,AppOpsService的askOperationLocked方法被调用,在askOperationLocked方法中调用IOnCallbackAddRequest接口中的onAddRequest方法。进而会调用到CheckPermissionCallback中的该方法,CheckPermissionCallback对该方法做了实现,实现的本质就是发送消息MSG_CTRLALL_PERMISSION_CHECK_PANEL,在该消息的处理中构造一个PermissionsCheckPanelView对象并显示出来。该对象代表着权限申请提示框。PermissionsCheckPanelView对象已实现OnItemClickListener和OnTouchListener接口,可以响应用户的选择操作。当用户做出选择或者等待15秒后,SystemUI会通过Binder调用AppOpsService的pushRequestChoice方法。在该方法中将用户的选择结果做处理,如用户选择记住时,需要将确权结果写进appops.xml文件。最后将确权结果通过Binder传回给申请权限的客户端,客户端根据结果继续下面的流程。

四  确权流程图

                 


猜你喜欢

转载自blog.csdn.net/zhongfan520520/article/details/80940077