多个运行时权限在 Android 中没有任何第三方库

在此分步教程中了解有关添加多个运行时权限的信息

本文是“ 今天学到的知识”系列的一部分,最初发布在我的TIL Github存储库和我的网站wajahatkarim.com上

在我当前的工作项目中,我有一项任务是在代码非常陈旧且使用旧方法和框架/工具的android应用中添加运行时权限。通常,我在所有应用程序中都使用Ted Permissions作为运行时权限,并且我敢肯定的是,这是我见过的一个令人惊叹的库的地狱,并且鉴于Android中复杂的场景和运行时权限流(感谢Google始终确保使所有事情都变得比以往更加复杂),该库使运行时权限变得轻而易举。特德公园的工作很棒

ParkSangGwon/TedPermission

Android 在API级别23(Android Marshmallow 6.0)或更高版本中引入了运行时权限。权限的实现流程非常复杂,如下图所示:

图片来源:Ted Permissions

今天,当我正在寻找一种非常简单的方法来执行此操作时,我震惊地看到Google如何使这一简单的事情变得如此复杂和令人困惑,难以实现,就像他们对Camera API的实现一样。我花了整整一天的时间才在代码的开头添加两个简单的运行时权限。这是我的方法。

重要说明:您不应一次性的请求所有权限。相反,您应该仅在应该使用该许可时才请求相关许可。我在开始时请求所有的权限,因为我们的代码库非常古老和复杂。

我的应用需要存储和位置权限。因此,将这些权限添加到Android Manifest文件中,如下所示:

现在,应用程序启动后,它会同时请求(位置和存储)权限。如果两个权限都被授予,则该应用程序将正常执行常规功能。我们可以在第一个Activity的onCreate()方法中进行操作,如下所示:

请注意,在上面的代码中,我创建了一个String []数组,其中包含我们将在此处请求的所有权限。现在,让我们实现checkAndRequestPermissions()方法。

从上面的代码中可以看到,我们可以使用ContextCompat.checkSelfPermission()方法检查任何权限的状态。我们可以使用ActivityCompat.requestPermissions()方法请求任何权限。这些方法已包含在支持库中。

现在,如果listPermissionsNeeded不为空,则意味着至少一个或多个权限已被拒绝。因此,requestPermissions()方法将显示权限对话框,并将调用onRequestPermissionsResult()回调方法

现在,如果listPermissionsNeeded不是空的,这意味着至少有一个或多个权限被拒绝。因此,requestPermissions()方法将显示权限对话框,并调用onRequestPermissionsResult()回调方法

如果通过“不再询问”拒绝了任何许可,则只能从应用程序的设置中允许该许可。由于没有这些权限,我的应用程序无法运行,因此我将显示另一个对话框,该对话框将允许用户转到应用程序的“设置”屏幕并允许手动授予权限。

Android上的Chrome浏览器的权限屏幕

我们可以使用另一个方法ActivityCompat.shouldShowRequestPermissionRationale(context,Permission)来执行此操作,该方法保留“不再询问”的记录。如果此方法返回true,则表示Android将显示请求权限对话框。并且如果为false,则当用户选中“不再询问”时,Android将不会显示该对话框。因此,在这里您必须将用户重定向到“设置”->“权限”屏幕,以允许用户手动授予权限。

现在,让我们看一下onRequestPermissionsResult()方法中的代码。我也提出了一些意见,因此这应该是不言而喻的。

这是showDialog()方法。它仅用于创建AlertDialog。

我希望这对您的应用程序开发有所帮助,并解决了运行时权限问题。

原文链接:https://dev.to//wajahatkarim/multiple-runtime-permissions-in-android-without-any-third-party-libraries-324l

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值