如何从片段生命周期方法内请求Android运行时权限(OS 6+;)

如何从片段生命周期方法内请求Android运行时权限(OS 6+;),android,android-fragments,blocking,lifecycle,runtime-permissions,Android,Android Fragments,Blocking,Lifecycle,Runtime Permissions,我有一个基于片段的应用程序(使用“targetSdkVersion 23”),它在一些需要危险权限的片段生命周期方法中执行代码。 OS 6权限框架涉及通过回调接受权限,然后应用程序才能继续执行实际需要权限的代码。 OS 6权限模型似乎不提供同步模式,并且在依赖于危险权限的生命周期方法中,有一堆代码当前正在执行(棉花糖前)。 这个新的回调需求将破坏我现有的代码,因为由于回调的异步性质,主线程将被迫继续执行下一个生命周期方法,而没有完成执行上一个生命周期方法(!)中的逻辑;这种执行错位会在代码的下游

我有一个基于片段的应用程序(使用“targetSdkVersion 23”),它在一些需要危险权限的片段生命周期方法中执行代码。 OS 6权限框架涉及通过回调接受权限,然后应用程序才能继续执行实际需要权限的代码。 OS 6权限模型似乎不提供同步模式,并且在依赖于危险权限的生命周期方法中,有一堆代码当前正在执行(棉花糖前)。 这个新的回调需求将破坏我现有的代码,因为由于回调的异步性质,主线程将被迫继续执行下一个生命周期方法,而没有完成执行上一个生命周期方法(!)中的逻辑;这种执行错位会在代码的下游产生问题

如果我在主线程中应用阻塞技术(BlockingQueue、CountDownLatch等),似乎也会阻止回调的发生

有谁能推荐一种技术或编码模型,使我能够请求并获得运行时权限,而不破坏当前的应用程序,也不需要对应用程序进行大规模的重新架构


PS.这是一个基于Java8的应用程序。

您必须将所有需要权限的逻辑移到生命周期方法之外,并从回调中调用if。是的,但问题是在生命周期方法期间需要逻辑执行顺序;代码初始化了片段所需的一些内容。回调的上下文似乎不是执行该代码的正确位置/时间。没有代码,其他人几乎无法提供帮助。这样做的方法是从生命周期中删除。您将无法同步执行,任何阻止应用程序执行的尝试都将被系统报告为不工作。你必须重新考虑你是怎么做的。我意识到在生命周期方法中阻止执行是非常不受欢迎的,但我希望繁重的代码重构不是唯一的解决方案。您必须将所有需要权限的逻辑移到生命周期方法之外,并从回调中调用if。是的,但问题是,在生命周期方法中需要逻辑执行的顺序;代码初始化了片段所需的一些内容。回调的上下文似乎不是执行该代码的正确位置/时间。没有代码,其他人几乎无法提供帮助。这样做的方法是从生命周期中删除。您将无法同步执行,任何阻止应用程序执行的尝试都将被系统报告为不工作。你必须重新考虑你是怎么做的。我意识到在生命周期方法中阻止执行是非常不受欢迎的,但我希望繁重的代码重构不是唯一的解决方案。