Python开发安卓-Virgo库开发日记(3)--增加权限获取

事情是这样的:

这天我正在写Virgo的位置支持,可是她(adroid stdio)突然给我报了错,关于GPS权限获取错误的

原来,在Android7.0之后,危险权限(例如位置获取,摄像头调用)都需要在程序中动态申请,变得超级麻烦。

于是我引进了Google提供的一个模块:EasyPermission,将其封装后作为Virgo的权限获取模块。

新的权限获取模块位于Virgo.android.APP.permission下,下面介绍一下基础功能

【壹】权限模块常用函数或类

permission.py:

class PermissionManager类  --内部定义了约200个类变量,代表着200多个权限变量
class PermissionStatus类   --内部封装两种状态:PERMISSION_GRANTED(权限获取成功)、PERMISSION_DENIED(权限获取失败)
func check_permission(which_permission, activity) -> bool    --用于检测是否拥有此权限,参数1:权限名,可通过PermissionManager获取。参数2:Activity对象
func ask_for_permission(activity, ask_info, request_code, which_permission)    --请求权限,参数1:Activity对象,参数2:提示信息字符串(当第二次请求权限时,会出现一个对话框显示你的提示信息,例如“请求位置权限是为了更好地确定您周围的朋友,请允许”之类的信息),参数3:请求码,只需要保证是一个唯一整数即可,用于区分获取不同权限时对应调用的函数,参数4:权限名,可通过PermissionManager获取。

func check_activity_permission(which_permission, activity) -> bool --用于检测是否拥有此权限,参数1:权限名,可通过PermissionManager获取。参数2:Activity对象.注:功能与上面的check_permission相同,但更推荐使用这个,因为这个函数的底层基于高级API,更加稳定

 【贰】在Activity中使用:

1.引入对应模块

from Virgo.android.APP.permission import check_permission, PermissionManager, ask_for_permission, check_activity_permission

2.定义自己的Activity,不过此时需继承PermissionControlActivity(需要权限的Activity)

class LocationActivity(PermissionControlActivity):

3.重写4个新增加的类方法

方法名参数描述
onPermissionsGranted
requestCode(请求码), permissions(权限列表)
当权限被允许时执行的操作
onPermissionsDenied
requestCode, permissions
当权限被拒绝是执行的操作
onRationaleAccepted
requestCode
当提示框被点击“确定”时执行的操作
onRationaleDenied
requestCode
当提示框被点击“取消”时执行的操作

【叁】在实际情况中,举例

假如我们需要开发一款需要用到位置/GPS定位的APP,此时需要用到位置权限

涉及到的权限:

PermissionManager.ACCESS_COARSE_LOCATION

PermissionManager.ACCESS_FINE_LOCATION

1.在Activity的onCreate方法重写中添加 ask_for_permission函数调用

先加个逻辑判断:如果没有此权限,就获取,如果有了权限就直接跳过即可

        if check_activity_permission(
                [PermissionManager.ACCESS_COARSE_LOCATION, PermissionManager.ACCESS_FINE_LOCATION],
                self):

如果没有此权限,即check函数返回False:

ask_for_permission(self, "请同意请求", 666, [PermissionManager.ACCESS_COARSE_LOCATION,PermissionManager.ACCESS_FINE_LOCATION])

2. 重写“四个方法”

允许权限时:

    def onPermissionsGranted(self, requestCode, permissions):
        toast(self, "权限获取成功!")
        # 此处省略操作,可以接着往下写

拒绝权限时:

def onPermissionsDenied(self, requestCode, permissions):
        toast(self, "权限获取失败..")
        # 自己写去.......

关于对话框的:

    def onRationaleAccepted(self, requestCode):
        toast(self, "点击了确定按钮......")

    def onRationaleDenied(self, requestCode):
        toast(self, "点击了取消按钮")

因为懒,所以不录屏了

开始申请权限
点击“拒绝”,触发onPermissionsDenied

第二次请求时,先跳出提示信息
点击“确定”按钮后,继续申请权限

 注意:如果用户连续点击“拒绝”两次后,那么之后程序无法继续跳出申请窗口,只能在手机设置中为程序赋予权限了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值