本发明属于移动终端android系统技术领域,尤其涉及一种android系统权限管理方法。
背景技术:
android系统permission机制的大部分功能都有android系统代码完成,在系统安全得到保证的前提下,访问者与资源间的访问控制是可以得到保证的。但是粗粒度的权限访问控制能力管理,使得permission机制存在一系列的安全问题。由于不显示授权界面、权限描述不清和粗粒度的用户访问控制能力管理引发用户permission确认过程中的安全隐患,导致应用程序过度申请权限、滥用权限和系统权限管理难度增加。
综上所述,现有技术存在的问题是:由于不显示授权界面、权限描述不清和粗粒度的用户访问控制能力管理引发用户permission确认过程中的安全隐患,以及permission传递机制管理的漏洞为攻击者提供了合谋攻击的途径。现有技术提供一站式服务,相当于应用程序安装时,接受应用程序所申请的所有权限,否则,不能安装该应用程序。这种一站式服务没有提供后期的权限维护和修改、申请功能,而权限管理功能封装在框架层,对于开发者而言,必须深入android系统的开发,对其做相应的修改。
技术实现要素:
针对现有技术存在的问题,本发明提供了一种android系统权限管理方法。
本发明是这样实现的,一种android系统权限管理方法,所述android系统权限管理方法包括以下步骤:
应用程序访问权限api,进行权限检查;
应用程序权限不存在时进入权限申请;
应用程序权限存在,android系统权限管理数据查询应用程序对应的应用进程权限;
根据应用进程权限的查询结果,执行相应操作。
进一步,应用程序根据访问api所需的权限调用checkselfpermission()方法,检测应用是否拥有该权限,当应用程序拥有该权限时,进入权限提示模块,否则进入权限申请模块。
进一步,权限申请在程序中对权限进行动态的申请。
进一步,应用进程权限包括允许、提示和拒绝。
进一步,当应用程序对应权限为允许时,应用程序正常调用权限的api;
当应用程序对应权限为提示时,应用程序暂停执行,弹出对话框并接受用户的选择,根据用户的选择来决定是否继续执行;
当应用程序对应权限为拒绝时,应用程序继续执行,不能调用需要权限的api。
本发明的另一目的在于提供一种利用所述android系统权限管理方法的基于android6.0及以上版本权限新特性的权限管理方法,所述基于android6.0及以上版本权限新特性的权限管理方法具体步骤包括如下:
步骤一,权限检测:
程序封装一个方法haspermission(),传入的参数为权限名数组,调用checkselfpermission(),同时传入参数为权限名数组,根据返回值来检测是否拥有权限;
步骤二,权限申请:
程序封装一个权限申请方法requestpermission(),权限申请方法的参数为申请码和权限名数组在方法中调用requestpermissions(),权限申请方法参数为权限名数组和context以及申请码;
步骤三,请求回调处理:
重写一个方法onrequestpermissionresult(),主要的参数有申请码、权限名数组,调用switch结构,根据申请码进行区分请求。
本发明的另一目的在于提供一种应用所述android系统权限管理方法的移动终端。
本发明的另一目的在于提供一种应用所述android系统权限管理方法的android系统。
本发明的优点及积极效果为:
本发明通过在程序中增加权限检测、申请和回调方法,因此结合了android6.0及以上版本的权限管理新特性,增量权限在应用层申请的功能,解决了android权限不能动态申请的问题。
本发明通过在权限管理中增加允许、提示和禁止功能,增加用户自主控制应用程序权限的能力,解决了android粗粒度的权限管理问题。
附图说明
图1是本发明实施例提供的基于android6.0系统权限管理方法流程图。
图2是本发明实施例提供的基于android6.0权限新特性的权限管理方法流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例提供的基于android6.0及以上版本系统权限管理方法。
下面结合附图对本发明的应用原理作详细的描述。
如图1所示,本发明实施例基于android6.0提供的系统权限管理方法包括以下步骤:
s101:应用程序访问需要权限的api时,程序本身进行权限检查;
s102:应用程序权限不存在时进入权限申请模块;
s103:应用程序权限存在时,在android系统的权限管理数据查询所述应用程序对应的应用进程权限;
s104:根据所述应用进程权限的查询结果,执行相应操作。
下面结合附图对本发明的应用原理作进一步的描述。
本发明实施例提供的android系统权限管理方法包括以下步骤:
步骤一,当应用程序访问需要权限的api时,程序本身进行权限检查
应用程序根据访问api所需的权限调用checkselfpermission()方法,检测应用是否拥有该权限,当应用程序拥有该权限时,进入权限提示模块,否则进入权限申请模块。
在本发明实施例中,android系统的权限管理数据来自于/data/system/packages.xml文件中,开机时直接读取该文件,加载权限信息到内存。应用程序的标识用于区分应用程序,该应用程序标识可以是包名。
需要权限的数据大致分为系统资源和应用程序资源。系统资源包括android系统提供的各种服务、硬件设备、各种数据库资源。应用程序的资源包括构成应用程序的四大主键。这些资源通过对访问者提出能力要求,实现访问控制。
步骤二,当应用程序权限不存在时进入权限申请模块
在权限申请模块主要运用android6.0关于权限的新特性,在程序中对权限进行动态的申请。
步骤三,当应用程序权限存在时,在android系统的权限管理数据查询所述应用程序对应的应用进程权限。
在本发明实例中,应用进程权限包括允许、提示和拒绝。
步骤四,当根据所述应用进程权限的查询结果,执行相应操作。
当应用程序对应权限为允许时,应用程序正常调用需要该权限的api;
当应用程序对应权限为提示时,应用程序暂停执行,弹出对话框并接受用户的选择,根据用户的选择来决定是否继续执行;
当应用程序对应权限为拒绝时,应用程序继续执行,但不能调用需要该权限的api。
需要说明的是,弹出对话框为dialog对话框,提示用户索要读取的数据或者访问的服务,并接受用户的选择允许或拒绝。
如图2所示,本发明实施例提供的基于android6.0权限新特性的权限管理方法具体步骤包括如下:
步骤一,权限检测
程序封装一个方法haspermission(),传入的参数为权限名数组,在方法中调用checkselfpermission(),同时传入参数为权限名数组,根据方法的返回值来检测是否拥有该权限。
步骤二,权限申请
程序封装一个权限申请方法requestpermission(),方法的主要参数为申请码和权限名数组在方法中调用requestpermissions(),方法的主要参数为权限名数组和context以及申请码。
步骤三,请求回调处理
重写一个方法onrequestpermissionresult(),主要的参数有申请码、权限名数组。调用switch结构,根据申请码进行区分请求。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。