权限申请方法、组件、装置及计算机可读存储介质

著录项
  • CN202011477694.X
  • 20201215
  • CN112651040A
  • 20210413
  • 中国银联股份有限公司
  • 郑文添;魏猛
  • G06F21/62
  • G06F21/62 G06F21/53

  • 上海市浦东新区含笑路36号
  • 上海(31)
  • 北京市中伦律师事务所
  • 杨黎峰
摘要
本发明提供了权限申请方法、组件、装置及计算机可读存储介质,该方法包括:接收外部应用的权限申请请求,权限申请请求包括目标权限的权限名;若目标权限未被授权,则根据当前的栈顶页面(Activity)组件创建透明的权限申请容器;利用权限申请容器向安卓系统申请目标权限,并从安卓系统接收权限申请结果;根据权限申请结果调用对应的回调函数,以实现对目标权限的成功回调或失败回调。利用上述方法,能够大大简化权限申请的过程,降低代码的冗余。
权利要求

1.一种权限申请方法,其特征在于,应用于安卓平台,所述方法包括:

接收外部应用的权限申请请求,所述权限申请请求包括目标权限的权限名;

若所述目标权限未被授权,则根据当前的栈顶页面(Activity)组件创建透明的权限申请容器;

利用所述权限申请容器向安卓系统申请所述目标权限,并从所述安卓系统接收权限申请结果;

根据所述权限申请结果调用对应的回调函数,以实现对所述目标权限的成功回调或失败回调。

2.根据权利要求1所述的方法,其特征在于,所述权限申请容器包括透明碎片(fragment)控件。

3.根据权利要求2所述的方法,其特征在于,利用所述权限申请容器向安卓系统进行权限申请,并从所述安卓系统接收权限申请结果,包括:

创建所述透明碎片(fragment)控件之后,触发所述透明碎片(fragment)控件的请求权限方法,所述请求权限方法用于触发所述安卓系统发起针对所述目标权限的权限申请流程;

若所述安卓系统收到针对所述目标权限的授权点击事件,则通过所述安卓系统回调所述透明碎片(fragment)控件的请求权限结果方法,将所述权限申请结果更新为权限申请成功;

若所述安卓系统收到针对所述目标权限的拒绝授权点击事件,则通过所述安卓系统回调所述透明碎片(fragment)控件的所述请求权限结果方法,将所述权限申请结果更新为权限申请失败。

4.根据权利要求2所述的方法,其特征在于,根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件,还包括:

通过安卓系统提供的页面(Activity)生命周期回调接口监控实时栈元素,并利用监控结果维护页面列表,其中,在所述页面列表中实时添加新生成元素以及删除被销毁元素;

利用所述页面列表,获取最后入栈的元素作为当前的所述栈顶页面(Activity)组件;

在工厂模式中,根据所述栈顶页面(Activity)组件的类型,创建对应类型的透明碎片(fragment)控件。

5.根据权利要求2所述的方法,其特征在于,

每次权限申请中只维护一个权限申请容器,并为所述权限申请容器标记标签,后续的权限申请过程中,优先根据所述标签到对应的所述权限申请容器以执行权限申请;以及,

当所述权限申请容器绑定的所述栈顶页面(Activity)组件被销毁时,所述权限申请容器也被销毁。

10.根据权利要求2所述的方法,其特征在于,所述权限申请请求还包括权限弹框信息,所述权限弹框信息用于指示是否以权限提示框的方式申请所述目标权限;以及,

根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件之前,所述方法还包括:

根据所述权限弹框信息判断是否需要以所述权限提示框的方式申请所述目标权限;其中,

若需要以权限提示框的方式申请所述目标权限,则在所述外部应用中以所述权限提示框的方式向用户展示预设的权限提示信息,以及,响应于关于所述权限提示信息的用户拒绝事件而结束所述权限申请,或则,响应于关于所述权限提示信息的用户确认事件而继续执行所述根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件及后续步骤;

若不需要以权限提示框的方式申请所述目标权限,则直接继续执行所述根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件及后续步骤。

6.根据权利要求1-5中任意一项所述的方法,其特征在于,所述权限申请请求包括:动态权限申请和特殊权限申请;以及,所述方法还包括:

当所述权限申请请求为动态权限申请时,根据所述权限申请结果调用动态权限申请成功回调函数或者动态权限申请失败回调函数;

当所述权限申请请求为特殊权限申请时,根据所述权限申请结果调用特殊权限申请成功回调函数或者特殊权限申请失败回调函数。

7.根据权利要求1所述的方法,其特征在于,接收外部应用的权限申请请求之后,所述方法还包括:

根据所述权限名检测所述目标权限是否已经被授权;其中,

若所述目标权限已被授权,则无需执行后续步骤,直接对所述目标权限进行成功回调。

8.根据权利要求7所述的方法,其特征在于,所述方法还包括:

检测所述目标权限是否已经被授权之前,判断所述权限名是否存在于预先注册的权限名列表中,若不存在则停止所述权限申请,并生成报错信息。

9.根据权利要求7所述的方法,其特征在于,所述方法还包括:

在检测所述目标权限是否已经被授权之前,判断所述权限申请请求是否为动态权限申请或特殊权限申请;其中,

若所述权限申请请求并非是所述动态权限申请或所述特殊权限申请,且所述安卓系统为Android6.0之前的版本,则直接对所述目标权限进行成功回调;

若所述权限申请请求是所述动态权限申请或所述特殊权限申请,或者,所述安卓系统为Android6.0或之后的版本,则进一步检测所述目标权限是否被授权。

11.一种权限申请组件,其特征在于,应用于安卓平台,所述组件包括:

申请模块,用于接收外部应用的权限申请请求,所述权限申请请求包括目标权限的权限名;

生命周期模块,用于当所述目标权限未被授权时,根据当前的栈顶页面(Activity)组件创建透明的权限申请容器;

容器模块,用于利用所述权限申请容器向安卓系统申请所述目标权限,并从所述安卓系统接收权限申请结果;

回调模块,用于根据所述权限申请结果调用对应的回调函数,以实现对所述目标权限的成功回调或失败回调。

12.根据权利要求11所述的组件,其特征在于,所述权限申请容器包括透明碎片(fragment)控件。

13.根据权利要求12所述的组件,其特征在于,所述容器模块还用于:

创建所述透明碎片(fragment)控件之后,触发所述透明碎片(fragment)控件的请求权限组件,所述请求权限组件用于触发所述安卓系统发起针对所述目标权限的权限申请流程;

若所述安卓系统收到针对所述目标权限的授权点击事件,则通过所述安卓系统回调所述透明碎片(fragment)控件的请求权限结果组件,将所述权限申请结果更新为权限申请成功;

若所述安卓系统收到针对所述目标权限的拒绝授权点击事件,则通过所述安卓系统回调所述透明碎片(fragment)控件的所述请求权限结果组件,将所述权限申请结果更新为权限申请失败。

14.根据权利要求12所述的组件,其特征在于,所述生命周期模块还用于:

通过实现安卓系统提供的页面(Activity)生命周期回调接口监控实时栈元素,并利用监控结果维护页面列表,其中,在所述页面列表中实时添加新生成元素以及删除被销毁元素;

利用所述页面列表,获取最后入栈的元素作为当前的所述栈顶页面(Activity)组件;

在工厂模式中,根据所述栈顶页面(Activity)组件的类型,创建对应类型的透明碎片(fragment)控件。

15.根据权利要求12所述的组件,其特征在于,

每次所述权限申请中只维护一个权限申请容器,为所述权限申请容器标记标签,在后续的权限申请过程中,优先根据所述标签到对应的所述权限申请容器以执行权限申请;以及,

当所述权限申请容器绑定的所述栈顶页面(Activity)组件被销毁时,所述权限申请容器也被销毁。

20.根据权利要求12所述的组件,其特征在于,所述权限申请请求还包括权限弹框信息,所述权限弹框信息用于指示是否以权限提示框的方式申请所述目标权限;以及,

所述组件还包括提示模块,用于:

在根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件之前,根据所述权限弹框信息判断是否需要以所述权限提示框的方式申请所述目标权限;其中,

若需要以权限提示框的方式申请所述目标权限,则在所述外部应用中以所述权限提示框的方式向用户展示预设的权限提示信息,以及,响应于关于所述权限提示信息的用户拒绝事件而结束所述权限申请,或则,响应于关于所述权限提示信息的用户确认事件而继续执行所述根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件及后续步骤;

若不需要以权限提示框的方式申请所述目标权限,则直接继续执行所述根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件及后续步骤。

16.根据权利要求11-15中任意一项所述的组件,其特征在于,所述权限申请请求包括:动态权限申请和特殊权限申请;以及,所述回调模块还用于:

当所述权限申请请求为动态权限申请时,根据所述权限申请结果调用动态权限申请成功回调函数或者动态权限申请失败回调函数;

当所述权限申请请求为特殊权限申请时,根据所述权限申请结果调用特殊权限申请成功回调函数或者特殊权限申请失败回调函数。

17.根据权利要求11所述的组件,其特征在于,所述组件还包括检测模块,用于:

接收外部应用的权限申请请求之后,根据所述权限名检测所述目标权限是否已经被授权;其中,

若所述目标权限已被授权,则无需执行后续步骤,直接对所述目标权限进行成功回调。

18.根据权利要求17所述的组件,其特征在于,所述组件还包括第一判断模块,用于:

在检测所述目标权限是否已经被授权之前,判断所述权限名是否存在于预先注册的权限名列表中,若不存在则停止所述权限申请,并生成报错信息。

19.根据权利要求17所述的组件,其特征在于,所述组件还包括第二判断模块,用于:

在检测所述目标权限是否已经被授权之前,判断所述权限申请请求是否为动态权限申请或特殊权限申请;其中,

若所述权限申请请求并非是所述动态权限申请或所述特殊权限申请,且所述安卓系统为Android6.0之前的版本,则直接对所述目标权限进行成功回调;

若所述权限申请请求是所述动态权限申请或所述特殊权限申请,或者,所述安卓系统为Android6.0或之后的版本,则进一步检测所述目标权限是否被授权。

21.一种权限申请装置,其特征在于,包括:

至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行:如权利要求1-10中任一项所述的方法。

22.一种计算机可读存储介质,所述计算机可读存储介质存储有程序,当所述程序被多核处理器执行时,使得所述多核处理器执行如权利要求1-10中任一项所述的方法。

说明书
技术领域

本发明属于权限申请领域,具体涉及权限申请方法、组件、装置及计算机可读存储介质。

本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。

诸如手机、平板电脑之类的终端设备中可安装各式各样的应用程序。应用程序为实现某些功能,需要具备相应的系统权限。例如,当应用程序需要实现向用户推荐通讯录好友的功能时,其需要具备获取通讯录信息的权限。安卓系统在6.0版本之后新增了一种动态权限机制,即某个应用程序在第一次使用某个权限(如相机权限,录音权限等)时,需要通过系统弹窗向用户申请该使用权限,用户同意以后该应用程序才能使用。

开发者在编写应用程序代码的时候,发现现有技术中实现上述动态申请权限的过程繁琐,冗余代码过多,且无法轻松实现在任意模块中动态申请权限。

针对上述现有技术中存在的问题,提出了一种权限申请方法、组件、装置及计算机可读存储介质,利用这种方法、装置及计算机可读存储介质,能够解决上述问题。

本发明提供了以下方案。

第一方面,提供一种权限申请方法,应用于安卓平台,方法包括:接收外部应用的权限申请请求,权限申请请求包括目标权限的权限名;若目标权限未被授权,则根据当前的栈顶页面(Activity)组件创建透明的权限申请容器;利用权限申请容器向安卓系统申请目标权限,并从安卓系统接收权限申请结果;根据权限申请结果调用对应的回调函数,以实现对目标权限的成功回调或失败回调。

在一些可能的实施方式中,权限申请容器包括透明碎片(fragment)控件。

在一些可能的实施方式中,利用权限申请容器向安卓系统进行权限申请,并从安卓系统接收权限申请结果,包括:创建透明碎片(fragment)控件之后,触发透明碎片(fragment)控件的请求权限方法,请求权限方法用于触发安卓系统发起针对目标权限的权限申请流程;若安卓系统收到针对目标权限的授权点击事件,则通过安卓系统回调透明碎片(fragment)控件的请求权限结果方法,将权限申请结果更新为权限申请成功;若安卓系统收到针对目标权限的拒绝授权点击事件,则通过安卓系统回调透明碎片(fragment)控件的请求权限结果方法,将权限申请结果更新为权限申请失败。

在一些可能的实施方式中,根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件,还包括:通过实现安卓系统提供的页面(Activity)生命周期回调接口监控实时栈元素,并利用监控结果维护页面列表,其中,在页面列表中实时添加新生成元素以及删除被销毁元素;利用页面列表,获取最后入栈的元素作为当前的栈顶页面(Activity)组件;在工厂模式中,根据栈顶页面(Activity)组件的类型,创建对应类型的透明碎片(fragment)控件。

在一些可能的实施方式中,每次权限申请中只维护一个权限申请容器,并为权限申请容器标记标签,后续的权限申请过程中,优先根据标签到对应的权限申请容器以执行权限申请;以及,当权限申请容器绑定的栈顶页面(Activity)组件被销毁时,权限申请容器也被销毁。

在一些可能的实施方式中,权限申请请求包括:动态权限申请和特殊权限申请;以及,方法还包括:当权限申请请求为动态权限申请时,根据权限申请结果调用动态权限申请成功回调函数或者动态权限申请失败回调函数;当权限申请请求为特殊权限申请时,根据权限申请结果调用特殊权限申请成功回调函数或者特殊权限申请失败回调函数。

在一些可能的实施方式中,接收外部应用的权限申请请求之后,方法还包括:根据权限名检测目标权限是否已经被授权;其中,若目标权限已被授权,则无需执行后续步骤,直接对目标权限进行成功回调。

在一些可能的实施方式中,方法还包括:检测目标权限是否已经被授权之前,判断权限名是否存在于预先注册的权限名列表中,若不存在则停止权限申请,并生成报错信息。

在一些可能的实施方式中,方法还包括:在检测目标权限是否已经被授权之前,判断权限申请请求是否为动态权限申请或特殊权限申请;其中,若权限申请请求并非是动态权限申请或特殊权限申请,且安卓系统为Android6.0之前的版本,则直接对目标权限进行成功回调;若权限申请请求是动态权限申请或特殊权限申请,或者,安卓系统为Android6.0或之后的版本,则进一步检测目标权限是否被授权。

在一些可能的实施方式中,权限申请请求还包括权限弹框信息,权限弹框信息用于指示是否以权限提示框的方式申请目标权限;以及,根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件之前,方法还包括:根据权限弹框信息判断是否需要以权限提示框的方式申请目标权限;其中,若需要以权限提示框的方式申请目标权限,则在外部应用中以权限提示框的方式向用户展示预设的权限提示信息,以及,响应于关于权限提示信息的用户拒绝事件而结束权限申请,或则,响应于关于权限提示信息的用户确认事件而继续执行根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件及后续步骤;若不需要以权限提示框的方式申请目标权限,则直接继续执行根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件及后续步骤。

第二方面,提供一种权限申请组件,包括:申请模块,用于接收外部应用的权限申请请求,权限申请请求包括目标权限的权限名;生命周期模块,用于当目标权限未被授权时,根据当前的栈顶页面(Activity)组件创建透明的权限申请容器;容器模块,用于利用权限申请容器向安卓系统申请目标权限,并从安卓系统接收权限申请结果;回调模块,用于根据权限申请结果调用对应的回调函数,以实现对目标权限的成功回调或失败回调。

在一些可能的实施方式中,权限申请容器包括透明碎片(fragment)控件。

在一些可能的实施方式中,容器模块还用于:创建透明碎片(fragment)控件之后,触发透明碎片(fragment)控件的请求权限方法,请求权限方法用于触发安卓系统发起针对目标权限的权限申请流程;若安卓系统收到针对目标权限的授权点击事件,则通过安卓系统回调透明碎片(fragment)控件的请求权限结果方法,将权限申请结果更新为权限申请成功;若安卓系统收到针对目标权限的拒绝授权点击事件,则通过安卓系统回调透明碎片(fragment)控件的请求权限结果方法,将权限申请结果更新为权限申请失败。

在一些可能的实施方式中,生命周期模块还用于:通过实现安卓系统提供的页面(Activity)生命周期回调接口监控实时栈元素,并利用监控结果维护页面列表,其中,在页面列表中实时添加新生成元素以及删除被销毁元素;利用页面列表,获取最后入栈的元素作为当前的栈顶页面(Activity)组件;在工厂模式中,根据栈顶页面(Activity)组件的类型,创建对应类型的透明碎片(fragment)控件。

在一些可能的实施方式中,每次权限申请中只维护一个权限申请容器,为权限申请容器标记标签,在后续的权限申请过程中,优先根据标签到对应的权限申请容器以执行权限申请;以及,当权限申请容器绑定的栈顶页面(Activity)组件被销毁时,权限申请容器也被销毁。

在一些可能的实施方式中,权限申请请求包括:动态权限申请和特殊权限申请;以及,回调模块还用于:当权限申请请求为动态权限申请时,根据权限申请结果调用动态权限申请成功回调函数或者动态权限申请失败回调函数;当权限申请请求为特殊权限申请时,根据权限申请结果调用特殊权限申请成功回调函数或者特殊权限申请失败回调函数。

在一些可能的实施方式中,组件还包括检测模块,用于:接收外部应用的权限申请请求之后,根据权限名检测目标权限是否已经被授权;其中,若目标权限已被授权,则无需执行后续步骤,直接对目标权限进行成功回调。

在一些可能的实施方式中,组件还包括第一判断模块,用于:在检测目标权限是否已经被授权之前,判断权限名是否存在于预先注册的权限名列表中,若不存在则停止权限申请,并生成报错信息。

在一些可能的实施方式中,组件还包括第二判断模块,用于:在检测目标权限是否已经被授权之前,判断权限申请请求是否为动态权限申请或特殊权限申请;其中,若权限申请请求并非是动态权限申请或特殊权限申请,且安卓系统为Android6.0之前的版本,则直接对目标权限进行成功回调;若权限申请请求是动态权限申请或特殊权限申请,或者,安卓系统为Android6.0或之后的版本,则进一步检测目标权限是否被授权。

在一些可能的实施方式中,权限申请请求还包括权限弹框信息,权限弹框信息用于指示是否以权限提示框的方式申请目标权限;以及,组件还包括提示模块,用于、在根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件之前,根据权限弹框信息判断是否需要以权限提示框的方式申请目标权限;其中,若需要以权限提示框的方式申请目标权限,则在外部应用中以权限提示框的方式向用户展示预设的权限提示信息,以及,响应于关于权限提示信息的用户拒绝事件而结束权限申请,或则,响应于关于权限提示信息的用户确认事件而继续执行根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件及后续步骤;若不需要以权限提示框的方式申请目标权限,则直接继续执行根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件及后续步骤。

第三方面,提供一种权限申请装置,包括:至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行如第一方面的方法。

第四方面,提供一种计算机可读存储介质,计算机可读存储介质存储有程序,当程序被多核处理器执行时,使得多核处理器执行如第一方面的方法。

本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:本实施例中,通过根据当前的栈顶页面(Activity)组件创建透明的权限申请容器,并所述权限申请容器向安卓系统申请所述目标权限,可以大大简化权限申请的过程,降低代码的冗余。

应当理解,上述说明仅是本发明技术方案的概述,以便能够更清楚地了解本发明的技术手段,从而可依照说明书的内容予以实施。为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举例说明本发明的具体实施方式。

通过阅读下文的示例性实施例的详细描述,本领域普通技术人员将明白本文所述的优点和益处以及其他优点和益处。附图仅用于示出示例性实施例的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的标号表示相同的部件。在附图中:

图1为根据本发明一实施例的权限申请方法的流程示意图;

图2为根据本发明另一实施例的权限申请方法的流程示意图;

图3为根据本发明一实施例的权限申请组件的结构示意图;

图4为根据本发明一实施例的权限申请装置的结构示意图。

在附图中,相同或对应的标号表示相同或对应的部分。

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

在本申请实施例的描述中,应理解,诸如“包括”或“具有”等术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不旨在排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在的可能性。

除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。

术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本申请实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。

本申请中的所有代码都是示例性的,本领域技术人员根据所使用的编程语言,具体的需求和个人习惯等因素会在不脱离本申请的思想的条件下想到各种变型。

本申请实施例提供的权限申请方法运行在电子设备上。本申请实施例提供的权限申请组件和装置布置在电子设备中。对应于市场上的产品,电子设备可以对应于智能电话、便携式电话、游戏机、电视、显示单元、用于车辆的抬头显示单元、笔记本计算机、膝上型计算机、平板个人计算机(PC)、个人媒体播放器(PMP)器、个人数字助理(PDA)等等。电子设备也可以实施为具有通信模块的通信终端,通信终端可以与诸如服务器等的外部电子设备通信,或者通过与外部电子设备交互工作来执行操作。

另外还需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。

本发明实施例提供一种权限申请方法,下面,首先对所述方法的发明构思进行介绍。

当用户使用安装于终端设备上的android应用程序时,有些情况下,android应用程序需要使用用户设备中的某些隐私要素,并希望获得该隐私要素的权限许可。基于此,本发明实施例提供一种权限申请方法,当接收外部应用传来的针对目标权限的权限申请请求时,若该目标权限未被授权,则可以根据当前的栈顶页面(Activity)组件创建透明的权限申请容器,并利用创建的该权限申请容器向安卓系统申请目标权限,根据从安卓系统接收权限申请结果调用对应的回调函数,最终以实现对目标权限的成功回调或失败回调。本申请实施例区别于传统的权限申请模式,通过管理应用当前栈信息,在任意模块申请权限时通过栈顶页面(Activity)生成透明容器进行权限申请,摆脱了传统权限申请方案高度依赖于业务View的现状。

本领域技术人员可以理解,所描述的应用场景仅是本发明的实施方式可以在其中得以实现的一个示例。本发明实施方式的适用范围不受任何限制。在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。

图1为根据本申请一实施方式的应用于安卓平台的权限申请方法100的流程示意图,在该流程中,从设备角度而言,执行主体可以是一个或者多个电子设备;从程序角度而言,执行主体相应地可以是搭载于这些电子设备上的程序。

如图1所示,该方法100可以包括:

步骤101、接收外部应用的权限申请请求,权限申请请求包括目标权限的权限名;

在本申请实施例中,权限(Permission)是指android应用程序为了使用用户的某些隐私要素,而需要让用户同意的权限。目标权限比如可以是外部应用使用设备摄像头的权限、外部应用访问设备通讯录的权限,诸如此类。

从Android 6.0开始,Android系统引入了权限申请机制,将所有权限分成了正常权限和危险权限,其中正常权限不会直接给用户隐私权带来风险,危险权限会授予应用访问用户机密数据的权限。应用程序需要动态申请相关危险权限后才能使用某些功能。通常情况下,如果应用程序需要危险权限,则在每次执行需要危险权限的操作之前,检查应用程序是否具有该危险权限。例如,应用程序如果需要使用拍照功能,则需要先判断应用程序是否具有相机权限,如果没有则需要去申请,用户同意后才能使用,如果用户拒绝则无法使用。

在一些可能的实施方式中,权限申请请求可以包括动态权限申请和特殊权限申请。

动态权限申请包括以下中的一种或多种危险类权限申请:存储卡文件读写权限申请,麦克风录音权限申请,相机权限申请,位置权限申请,日历权限申请,联系人权限申请,短信权限申请,传感器权限申请,等等。在android6.0之后,所有的危险类权限都需要在应用中动态申请,

特殊权限申请包括以下中的一种或多种:安装不可信任来源权限申请、系统允许通知权限和系统悬浮窗权限申请,等等。

一个示例中,用于实现该权限申请方法的组件对外暴露有如下接口,外部应用可以调用以下接口,从而可以利用一行代码实现动态权限申请或特殊权限申请。

(1)一行代码实现动态权限申请

Permission.getInstance().

.withSpecialPermission(SpecialPermission specialPermission)

.withSpecialPermissionCallback(RequestSpecialPermissionCallbackcallback)

.withRequestCode(Integer requestCode).requestSpecialPermission();

其中,参数:permissions:需要申请的权限名,为必传参数;callback:权限申请的回调,为必传参数;requestCode:用户自定义的请求码,可以为空;isRational:是否需要提示框,为必传参数;dialog:用户自定义的提示框

(2)一行代码实现特殊权限申请

Permission.getInstance().

.withSpecialPermission(SpecialPermission specialPermission)

.withSpecialPermissionCallback(RequestSpecialPermissionCallbackcallback)

.withRequestCode(Integer requestCode).requestSpecialPermission();

其中,参数:specialPermission:自定义的特殊权限,为必传参数,主要包括三种类型:SpecialPermission.UNKNOWN_APP_SOURCE,安装不可信任来源、SpecialPermission.NOTIFICATION系统允许通知、以及SpecialPermission.SYSTEM_ALERT系统悬浮窗;requestCode:请求码,Integer类型,可以传空值,使用系统默认的码;callback:特殊权限申请之后的回调接口,为必传参数

此外,动态权限申请和特殊权限申请的区别还包括:动态权限申请可以在应用界面上基于用户的点击操作进行权限授权,而特殊权限申请需要跳转到设定设备界面(比如系统设置页面)并基于用户的点击操作来进行权限授权。

步骤102、若所述目标权限未被授权,则根据当前的栈顶页面(Activity)组件创建透明的权限申请容器;

其中,页面(Activity)组件是android应用程序的组件之一,负责用户与系统的交互,在android系统中,Activity相当于PC端的一个WEB页面或客户端界面,其不仅用于向用户展示信息,还能监听并响应用户的操作。同一个应用通常有多个Activity,但是同时展示给用户处于激活状态的只有一个,其他Activity处于暂停或停止状态。

在一些可能的实施方式中,透明的权限申请容器为透明碎片(fragment)控件。其中,碎片(fragment)控件是指Android应用程序页面(Activity)的小模块,是一种可以嵌入在页面(Activity)当中的片段,用来展示界面内容,可以接受用户点击、拖动等交互操作。例如一个页面中点击一菜单进入二级页面,该二级页面可通过碎片(Fragment)控件来实现。

在一些可能的实施方式中,步骤102还可以包括:通过安卓系统提供的页面(Activity)生命周期回调接口监控实时栈元素,并利用监控结果维护页面列表,其中,在页面列表中实时添加新生成元素以及删除被销毁元素;利用页面列表,获取最后入栈的元素作为当前的栈顶页面(Activity)组件;在工厂模式中,根据栈顶页面(Activity)组件的类型,创建对应类型的透明碎片(fragment)控件。

具体来说,可以通过安卓系统提供的Activity Lifecycle Callbacks方法来监控应用的实时栈元素。其内部维护一个页面(Activity)列表,当有新Activity生成时,该页面(Activity)列表将该新Activity加入,当Activity被销毁的时候该页面(Activity)列表将该Activity删除。通过该页面(Activity)列表,可以获取栈顶页面(最后入栈的元素)进而生成权限申请容器。

在一些可能的实施方式中,每次权限申请中只维护一个权限申请容器,并为权限申请容器标记标签,后续的权限申请过程中,优先根据标签到对应的权限申请容器以执行权限申请;以及,当权限申请容器绑定的栈顶页面(Activity)组件被销毁时,权限申请容器也被销毁。在本申请实施例中,通过只维护一个容器能够大大提高碎片管理效率。

步骤103、利用所述权限申请容器向安卓系统申请所述目标权限,并从所述安卓系统接收权限申请结果;

本申请实施例中,可以使用透明碎片(fragment)控件来处理Android的动态权限申请、特殊权限申请等功能。由于Android系统的迭代更新,页面(Activity)有两种类型,碎片(fragment)控件也对应有两种类型。使用工厂模式,根据传入的栈顶页面(Activity)类型创造对应的透明碎片(Fragment),通过代理模式来处理不同的碎片(Fragment)进行动态权限申请和特殊权限申请等操作。其中,不同类型的碎片(Fragment)创建以及管理是比较繁琐的事情,可以通过在工厂类中统一管理碎片(Fragment)事务的启停、添加、删除等操作,有效管理权限容器。

在一些可能的实施方式中,参考图2,步骤103可以进一步包括以下细化步骤:

201、创建透明碎片之后,触发透明碎片的请求权限方法,请求权限方法用于触发安卓系统发起针对目标权限的权限申请流程;

202、若安卓系统收到针对目标权限的授权点击事件,则通过安卓系统回调透明碎片的请求权限结果方法,将权限申请结果更新为权限申请成功;

203、若安卓系统收到针对目标权限的拒绝授权点击事件,则通过安卓系统回调透明碎片的请求权限结果方法,将权限申请结果更新为权限申请失败。

其中,在创建的透明碎片(Fragment)中提供了动态申请权限的结果回调以及特殊权限申请的结果回调,在权限申请完毕后将结果通知给外部应用。具体来说,创建完碎片(Fragment)之后,触发碎片(Fragment)的request permission方法,触发安卓系统的权限申请流程。基于此,安卓系统会向用户询问是否同意该权限申请请求,并响应于用户点击事件,通过安卓系统回调通知透明碎片(Fragment)的request permission result方法,以更新权限申请结果。其中,若权限申请通过,通过透明碎片(Fragment)中的回调函数调用权限申请成功的代码,通知外部应用权限申请成功。否则通过透明碎片(Fragment)中的回调函数调用权限申请失败的代码,进行相应的失败处理逻辑。

步骤104、根据所述权限申请结果调用对应的回调函数,以实现对所述目标权限的成功回调或失败回调。

其中,可以预先注册提供各类请求操作的回调接口。包括动态权限申请成功回调函数、申请失败回调函数、特殊权限申请成功回调函数、特殊权限申请失败回调函数以及权限提示框确认键及取消键的回调接口

一个示例中,用于实现该权限申请方法的组件对外还暴露有如下接口,并在后续需要使用时候调用该回调接口。

(1)动态权限申请回调接口,示例性代码如下所示:

(2)特殊权限申请回调接口,示例性代码如下所示:

(3)自定义提示框回调,示例性代码如下所示:

在一些可能的实施方式中,权限申请请求包括:步骤104还包括:当权限申请请求为动态权限申请时,根据权限申请结果调用动态权限申请成功回调函数或者动态权限申请失败回调函数;当权限申请请求为特殊权限申请时,根据权限申请结果调用特殊权限申请成功回调函数或者特殊权限申请失败回调函数。

在一些可能的实施方式中,步骤101之后,该方法还可以进一步包括:

步骤301、判断权限名是否存在于预先注册的权限名列表中。

其中,若不存在则执行步骤302、停止权限申请,并生成报错信息。

相反,若权限名存在于预先注册的权限名列表中,则继续执行后续的权限申请步骤。

其中,该权限名列表中预先注册有提供的多种合法权限名,换言之,相当于可以首先判断权限名是否合法,若权限申请请求中携带的权限名并非为合法权限名则无需进行后续的权限申请步骤。

在一些可能的实施方式中,步骤101之后,该方法还可以进一步包括:

步骤303、判断权限申请请求是否为动态权限申请或特殊权限申请;

其中,若权限申请请求并非是动态权限申请或特殊权限申请,且安卓系统为Android6.0之前的版本,则直接对目标权限进行成功回调;若权限申请请求是动态权限申请或特殊权限申请,或者,安卓系统为Android6.0或之后的版本,则继续执行后续的权限申请步骤。

本申请实施例中,由于是从Android 6.0才开始引入了权限申请机制,因此,若权限申请请求并非是动态权限申请或特殊权限申请,且安卓系统为Android6.0之前的版本,则可以直接成功回调。

可选地,步骤303可以在步骤301之后或之前执行,本申请对此不做具体限制。

在一些可能的实施方式中,步骤102之前,该方法还可以进一步包括执行:

步骤304、根据权限名检测目标权限是否已经被授权。

其中,若目标权限已被授权,则无需执行后续步骤,直接调用用于实现目标权限的对应于权限申请成功的回调接口。相反,若所述目标权限未被授权,则继续执行上述步骤202-204。

可选地,可以在步骤301和步骤303之后执行步骤304。

在一些可能的实施方式中,当权限申请请求为动态申请请求时,权限申请请求还包括权限弹框信息,权限弹框信息用于指示是否以权限提示框的方式申请目标权限;以及,步骤304之后,该方法还可以进一步包括:

步骤305、根据权限弹框信息判断是否需要以权限提示框的方式申请目标权限;其中,

若需要以权限提示框的方式申请目标权限,则执行:

步骤306、在外部应用中以权限提示框的方式向用户展示预设的权限提示信息;以及,当针对该权限提示框的用户拒绝事件发生时,进一步执行步骤307、响应于关于权限提示信息的用户拒绝事件而结束权限申请,或则,当针对该权限提示框的用户确认事件发生时,响应于关于权限提示信息的用户确认事件而继续执行步骤102及后续步骤。

若不需要以权限提示框的方式申请目标权限,则直接继续执行步骤102及后续步骤。

本申请实施例中,为了让用户清晰知道当前权限申请的缘由,有时开发者需要提供额外的权限提示框来提示用户,本申请实施例可以提供给开发者私有定制权限提示框的功能。比如可以利用自定义的Dialog Fragment使得开发者可以定制个人的权限提示框。并在用户点击同意之后进入权限申请主流程。

值得注意的是,在使用MVVM模式构建Android应用程序时,所有的业务逻辑在ViewModel中处理,权限申请也同样如此。然而根据Android官方文档中权限申请的相关介绍,权限申请需要在Activity中或者Fragment中操作。这样的话,ViewModel就需要与View(Activity或Fragment)进行额外的通信,不符合MVVM的设计思想。本申请中,通过采用透明权限申请容器,可以实现在任意模块中进行权限申请,本申请的权限申请方法可以完美的融入MVVM模式开发的应用程序中。

基于相同的技术构思,本发明实施例还提供一种权限申请组件300,用于实现上述任一实施例所提供的权限申请方法。图3为本发明实施例提供的一种权限申请组件结构示意图。

参考图3,权限申请组件300包括:

申请模块,用于接收外部应用的权限申请请求,权限申请请求包括目标权限的权限名;

生命周期模块,用于当目标权限未被授权时,根据当前的栈顶页面(Activity)组件创建透明的权限申请容器;

容器模块,用于利用权限申请容器向安卓系统申请目标权限,并从安卓系统接收权限申请结果;

回调模块,用于根据权限申请结果调用对应的回调函数,以实现对目标权限的成功回调或失败回调。

在一些可能的实施方式中,权限申请容器包括透明碎片(fragment)控件。

在一些可能的实施方式中,容器模块还用于:创建透明碎片(fragment)控件之后,触发透明碎片(fragment)控件的请求权限方法,请求权限方法用于触发安卓系统发起针对目标权限的权限申请流程;若安卓系统收到针对目标权限的授权点击事件,则通过安卓系统回调透明碎片(fragment)控件的请求权限结果方法,将权限申请结果更新为权限申请成功;若安卓系统收到针对目标权限的拒绝授权点击事件,则通过安卓系统回调透明碎片(fragment)控件的请求权限结果方法,将权限申请结果更新为权限申请失败。

在一些可能的实施方式中,生命周期模块还用于:通过实现安卓系统提供的页面(Activity)生命周期回调接口监控实时栈元素,并利用监控结果维护页面列表,其中,在页面列表中实时添加新生成元素以及删除被销毁元素;利用页面列表,获取最后入栈的元素作为当前的栈顶页面(Activity)组件;在工厂模式中,根据栈顶页面(Activity)组件的类型,创建对应类型的透明碎片(fragment)控件。

在一些可能的实施方式中,每次权限申请中只维护一个权限申请容器,为权限申请容器标记标签,在后续的权限申请过程中,优先根据标签到对应的权限申请容器以执行权限申请;以及,当权限申请容器绑定的栈顶页面(Activity)组件被销毁时,权限申请容器也被销毁。

在一些可能的实施方式中,权限申请请求包括:动态权限申请和特殊权限申请;以及,回调模块还用于:当权限申请请求为动态权限申请时,根据权限申请结果调用动态权限申请成功回调函数或者动态权限申请失败回调函数;当权限申请请求为特殊权限申请时,根据权限申请结果调用特殊权限申请成功回调函数或者特殊权限申请失败回调函数。

在一些可能的实施方式中,组件还包括检测模块,用于:接收外部应用的权限申请请求之后,根据权限名检测目标权限是否已经被授权;其中,若目标权限已被授权,则无需执行后续步骤,直接对目标权限进行成功回调。

在一些可能的实施方式中,组件还包括第一判断模块,用于:在检测目标权限是否已经被授权之前,判断权限名是否存在于预先注册的权限名列表中,若不存在则停止权限申请,并生成报错信息。

在一些可能的实施方式中,组件还包括第二判断模块,用于:在检测目标权限是否已经被授权之前,判断权限申请请求是否为动态权限申请或特殊权限申请;其中,若权限申请请求并非是动态权限申请或特殊权限申请,且安卓系统为Android6.0之前的版本,则直接对目标权限进行成功回调;若权限申请请求是动态权限申请或特殊权限申请,或者,安卓系统为Android6.0或之后的版本,则进一步检测目标权限是否被授权。

在一些可能的实施方式中,权限申请请求还包括权限弹框信息,权限弹框信息用于指示是否以权限提示框的方式申请目标权限;以及,组件还包括提示模块,用于、在根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件之前,根据权限弹框信息判断是否需要以权限提示框的方式申请目标权限;其中,若需要以权限提示框的方式申请目标权限,则在外部应用中以权限提示框的方式向用户展示预设的权限提示信息,以及,响应于关于权限提示信息的用户拒绝事件而结束权限申请,或则,响应于关于权限提示信息的用户确认事件而继续执行根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件及后续步骤;若不需要以权限提示框的方式申请目标权限,则直接继续执行根据当前的栈顶页面(Activity)组件创建透明碎片(fragment)控件及后续步骤。

需要说明的是,本申请实施例中的权限申请组件可以实现前述权限申请方法的实施例的各个过程,并达到相同的效果和功能,这里不再赘述。

图4为根据本申请一实施例的权限申请装置,用于执行图1所示出的权限申请方法,该装置包括:至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行上述实施例所述的方法。

根据本申请的一些实施例,提供了权限申请方法的非易失性计算机存储介质,其上存储有计算机可执行指令,该计算机可执行指令设置为在由处理器运行时执行:上述实施例所述的方法。

本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、设备和计算机可读存储介质实施例而言,由于其基本相似于方法实施例,所以其描述进行了简化,相关之处可参见方法实施例的部分说明即可。

本申请实施例提供的装置、设备和计算机可读存储介质与方法是一一对应的,因此,装置、设备和计算机可读存储介质也具有与其对应的方法类似的有益技术效果,由于上面已经对方法的有益技术效果进行了详细说明,因此,这里不再赘述装置、设备和计算机可读存储介质的有益技术效果。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。

虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。

本文发布于:2024-09-24 23:29:25,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/85594.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议