1可行性分析
1.1权限数据抓取
服务器端可能是JavaEE、DOTNET等Web服务器,或者是提供Webservice接口的数据,并且组织成各种形式。Android提供的HttpClient可以向Web服务器发送请求并且处理响应,可以抓取到服务器获得的权限数据,此外Android也提供了Webservice和Socket[5]支持,所以Android从不同形式的服务器都可以获得数据,这为系统实现提供了重要的数据基础,本文着重讨论从Web服务器获得数据的方式。
1.2数据共享
Android提供了Application类,在一个应用中这个类的实例被共享,可以将权限数据放在其中,系统所有组件通过Application获得共享的权限数据。Application类通常要通过继承的方式使用。
1.3Android的可配置性组件
Android的展示层组件是Activity,这是一个容器组件,其他的组件可以通过配置文件或者硬编码的方式添加到Activity[6]中,然后显示在移动设备界面,其中通过XML配置文件具有灵活配置、维护方便的特点。所有可视化组件都继承了View组件,View组件具有setDescription(String)方法,配置文件是android:description属性,可以将权限数据配置其中,通过这个属性中配置的数据和服务器端抓取的权限数据进行比对,决定组件的可视化。
1.4Android组件的可见性属性
View组件可以通过setVisibility(int)方法设置组件的可视化,其参数有三个值,View.VISIBLE设置组件可以显示,View.INVISIBLE设置组件不显示但是占用布局空间,View.GONE设置组件不显示也不占用布局空间。
1.5Activity组件的遍历
Activity组件根据getLayoutInflater()方法获得LayoutInflater类型的引用[7],根据这个引用的inflate(int,ViewGroup)方法获得组件的布局,其中第一个参数是布局文件的ID,第二参数是组件组,根据获得布局可以遍历Activity中所有的组件。
2架构设计及代码实现
2.1权限实体类
权限实体类包含了权限的相关信息,其中最重要的就是权限数据。以下是权限实体类的代码片段:系统中所有的权限通过Map进行组织,键是权限字符串,值是权限对象,这可以方便通过权限字符串检索权限。
2.2通过HTTP获取服务器权限点
这里采用HTTP方式获取服务器数据,它和传统服务器编程中的请求和响应处理是相同的,Android实现了Apache的HttpClient接口,从而实现了HTTP操作。为了便于数据的操作和传送,服务器和Android客户端的数据可以通过JSON格式组织。以下是代码片段:
2.3数据共享实现
构建一个BasicApplication类继承Application,这个类的对象可以在应用程序中被每个组件共享访问,所以需要将其构建成单例模式,并给予共享数据的读写方法,以下是这个类的代码:
2.4权限控制类
权限控制类控制Activity中组件的可视化,在类中构建一个静态方法publicstaticvoidpermissionControl(Activityact,intresId,Map<String,Permission);这个方法的三个参数分别是activity组件的引用,activity组件中布局资源的id和权限数据。方法的功能是遍历布局资源中所有的组件,然后根据其中description属性配置的权限和获得的权限数据比对,如果比对成功则或者组件没有配置权限,则设置组件可视,否则隐藏组件,代码如下:
2.5Activity基类
所有的Activity都要进行权限控制,所以抽取出一个Activity的基类完成权限,Activity组件继承这个基类也就完成了权限控制,然后再完成自己独立的业务,基类具体代码如下:
3结束语
Android开发现在已经广泛的使用,Android自身是对Java进一步作了适应于移动开发的封装,基于移动应用的开发会越来越普遍,本文重点论述Android端权限系统的架构和实现,其主要目的是在构建可用的权限系统上让代码更加优雅,让系统的使用和可维护性更加方便。
作者:荣艳冬 单位:内蒙古商贸职业学院