当我们有多个活动时如何集中运行时权限

Posted

技术标签:

【中文标题】当我们有多个活动时如何集中运行时权限【英文标题】:How to centralize the run time permission when we have multiple activity 【发布时间】:2017-02-11 07:07:32 【问题描述】:

对不起,我的英语不好。

我的应用中有多个Activity,我需要集中运行时应用权限。

我需要使用BaseActivity吗?

如果是,请建议我如何处理应用程序中的许多Activity

如果不是,请提出更好的处理方法。

我想减少代码冗余。对每个Activity 一次又一次地编写相同的代码不感兴趣。

我也在寻找用户拒绝许可的负面情况,我必须表现出理性而不是一直要求允许许可。并基于此我必须提供消息,否则我必须更新 UI

【问题讨论】:

我也在寻找用户拒绝许可的负面情况,我必须表现出理性而不是继续要求允许许可。并基于此我必须提供消息,否则我必须更新 UI 【参考方案1】:

引入了运行时权限以控制危险资源

因此,理想情况下,您必须在每次使用资源时检查权限。这段代码不能删。

然后当涉及到请求权限时,它是单行代码。我不认为你一定有这个问题。

现在是棘手的部分。处理给定的权限。您绝对可以拥有一个基类(不推荐),但理想情况下,不同的权限用于不同的目的。

例如位置权限: 在同一个活动中说 Location.java,我可能需要位置权限来获取使用 LatLon 值的人的地址,而在同一个活动中,我正在使用位置权限来实时跟踪用户。

现在要处理相同权限的不同实现,您必须根据用途拥有唯一的权限代码,而不是基于您访问权限的资源。在基类中处理所有这些事情可能很棘手。因此,理想情况下,您必须在其所属的活动中处理权限。它将确保您的代码安全并防止与其他代码混淆。

始终建议阅读official docs。

在某些情况下,您可能会对代码冗余和多个实现感到困惑。为此,android 最终处理了大部分代码,作为程序员,最不期望的是在使用危险资源的地方检查权限并执行适当的操作。

【讨论】:

那么,你的意思是我们应该更喜欢重复代码?如果我有 10 个需要位置的活动,我应该在所有 10 个活动中编写相同的代码吗? 我也在寻找用户拒绝许可的负面情况,我必须表现出理性而不是继续要求允许许可。并基于此我必须提供消息,否则我必须更新 UI。 @LalitPoptani,重复代码和相似代码的多个实现之间存在差异。 API 23+ 的程序员最不希望请求权限 @Mubarak,对于否定情况,您可以拥有一个具有静态方法的类,您可以在其中传递上下文、消息和其他可用于基本原理的详细信息。它的常识是,无论在哪个活动权限被拒绝,都会导致类似的代码。但是对于积极的情况,您需要在每个活动中编写权限代码 @MohammedAtif 是的,但是在 10 个不同的屏幕上要求相同的权限,我会认为这是重复代码!【参考方案2】:

如果您有 10 个活动并且所有活动都需要位置权限。那么我想这对您的应用程序来说是非常关键的权限。

对于关键权限,如果用户不允许,您可以关闭您的应用程序,因此在第一个活动本身上执行此操作。就像 facebook 为各种许可所做的那样。这可能会给用户带来不好的体验,但它是您的应用程序的必要权限。

如果用户不允许,只需在第一个活动中编写一次并停止应用程序。很多旗舰应用程序都是这样做的。

【讨论】:

其实。不!如果用户在之前授予权限后拒绝了该权限,并打开了一个既不检查也不提示用户接受权限的活动,那么会发生什么? 我明确提到了第一个活动(这意味着先打开),如果给定继续检查权限,如果没有可以关闭应用程序。 好的。例如,让我们使用需要位置权限的 Facebook 应用程序。您单击图标并在第一个屏幕上接受许可。稍后,您将其撤消。然后,您从第三方应用程序向 Facebook 分享一些内容,该应用程序只是打开一个提示而不是应用程序本身。在那里,您单击需要您撤销的权限的“位置图钉”图标,然后呢? 我的目的不是争论。我的意思很简单,在一项活动中请求许可不是正确的建议或实施。 同意。在那种情况下,我猜 Base 类更聪明。

以上是关于当我们有多个活动时如何集中运行时权限的主要内容,如果未能解决你的问题,请参考以下文章

用户可以撤销(运行时)权限的所有情况是啥? (在活动生命周期中)

启动时的运行时权限

如何在 Android M 或更高版本中在运行时更改权限时防止重新创建 Activity

Android NotificationChannel 在运行时询问多个频道的权限?

允许多个运行时权限

清单中存在时未授予运行时权限(Android)[重复]