Android中基于回调接口的确权机制

2016-08-18 07:37林莉芸曾雪松
关键词:调用客户端对象

林莉芸 曾雪松

(信阳职业技术学院 数学与计算机科学学院,河南 信阳 464000)



Android中基于回调接口的确权机制

林莉芸曾雪松

(信阳职业技术学院 数学与计算机科学学院,河南 信阳 464000)

对Android系统中的回调接口的确权机制做简要介绍,对基于回调接口的确权机制做深入讨论,最后结合实际情况,给出Android应用的开发流程图。

Android;回调;接口;确权

0 引言

不管是桌面应用还是手机应用程序,面对最多的就是用户,经常需要处理的就是用户动作,也就是需要为用户的动作提供响应。这种为用户动作提供响应的机制就是确权机制。随着移动互联网的飞速发展,手机应用越来越丰富,在应用安装运行的同时,它们就拥有了一些搜集手机数据的权限,在丰富我们生活的同时,个人的隐私也随之有可能遭到泄露。在不知不觉中,大量的应用都在截取着我们在互联网上的消费信息和消费习惯。那么如何避免个人的过多信息遭到泄露呢?从Android 4.4开始引入了权限管理机制。

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

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

在实际实训项目实现上采用了基于回调接口的新的确权机制,用自定义的view代替了系统采用的AlertDialog,新机制能大大改善用户体验,符合OS 5.0风格。

1 回调接口

回调就是当主程序需要的时候(或者到预定义状态值)调用的接口实现类。接口实际上是不能被直接调用的,我们能调用的一定不是接口或者抽象类。

回调接口的很多应用场景是出现在以接口类型为参数的情况下,以匿名内部类的方式传入而达到。

例如,假设有一个Java的API方法叫作(其中的ClickEvent就是一个接口)public void addEventListener(ClickEvent evt),那么,你在调用的时候就可以这样:

addEventListener(new ClickEvent(){

//在这里实现接口中的方法

});

当发生某事件时,API的addEventListener方法就会被组件调用,从而所完成的匿名内部类代码就会被组件执行。

例如,客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数。像Win32下的窗口过程函数就是一个典型的回调函数。一般说来,C不会自己调用B,C提供B的目的就是让S来调用它,而且是C不得不提供。由于S并不知道C提供的B姓甚名谁,所以S会约定B的接口规范(函数原型),然后由C提前通过S的一个函数R告诉S自己将要使用B函数,这个过程称为回调函数的注册,R称为注册函数。Web Service以及Java的RMI都用到回调机制,可以访问远程服务器程序。

2 基于回调接口的确权机制

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

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

JAVA方法回调是功能定义和功能实现分享的一种手段,是一种耦合设计思想。作为一种架构,必须有自己的运行环境,并且提供用户的实现接口。

(1)定义接口 Callback,包含回调方法callback()

(2)在一个类Caller中声明一个Callback接口对象mCallback

(3)在程序中赋予 Caller对象的接口成员(mCallback) 一个内部类对象如

new Callback(){

callback(){

//函数的具体实现

}

}

这样,在需要的时候,可用Caller对象的mCallback接口成员调用callback()方法,完成回调。

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

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

3 结语

Android应用需要运行在手机上,手机与传统的计算机相比存储能力、计算能力有限,因此Android应用更适合作为客户端软件来使用。作为客户端应用程序,手机更能充分发挥它的携带方便的优势,可以随时随地开机运行程序,而且可以随时访问网络,通过网络与服务器交互。

[1]董晓刚.Android中基于回调机制的事件处理[J].中国电子商务,2013,(13).

[2]李杨.基于Android的多媒体应用开发与研究[J].计算机与现代化,2011,(4).

[3]韩超.基于Android经典应用开发[M].北京:人力资源出版社,2011.

[4]刘平.Android手机访问服务器的一种数据交互方法[J].电子设计工程,2010,(9).

责任编辑:柴造坡

10.3969/j.issn.1674-6341.2016.04.015

2016-03-31

林莉芸(1978—),女,河南驻马店人,硕士,讲师。研究方向:网络与多媒体技术、软件技术。

TP316

A

1674-6341(2016)04-0033-02

猜你喜欢
调用客户端对象
涉税刑事诉讼中的举证责任——以纳税人举证责任为考察对象
核电项目物项调用管理的应用研究
如何看待传统媒体新闻客户端的“断舍离”?
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
攻略对象的心思好难猜
基于系统调用的恶意软件检测技术研究
基于熵的快速扫描法的FNEA初始对象的生成方法
区间对象族的可镇定性分析