【问题标题】:Issue while revoking app permission from application Settings in Android从 Android 中的应用程序设置撤消应用程序权限时出现问题
【发布时间】:2021-12-30 03:10:15
【问题描述】:

问题是在应用程序运行时, 我按下设置图标并导航到应用程序设置屏幕,

我只是撤销权限(位置权限)或按下“拒绝”按钮。

现在,当我从最近模式打开应用程序时,由于应用程序处于最近模式,我的应用程序 UI 与片段不匹配。

注意:如果应用程序被终止并且我尝试从设置中撤消权限,这将正常工作。

而且我遇到了例外情况:

2021-11-19 15:20:24.637 16474-16474/ W/.: Accessing hidden method

Ljava/lang/Thread;->init2(Ljava/lang/Thread;)V (greylist-max-o, 链接,拒绝)2021-11-19 15:20:24.637 16474-16474/ W/.:访问隐藏 字段 Ljava/lang/Thread;->contextClassLoader:Ljava/lang/ClassLoader; (灰名单、链接、允许)2021-11-19 15:20:24.650 16474-16474/W/:访问隐藏 方法 Landroid/app/LoadedApk;->getServiceDispatcherCommon(Landroid/content/ServiceConnection;Landroid/content/Context;Landroid/os/Handler;Ljava/util/concurrent/Executor;I)Landroid/app/IServiceConnection; (黑名单、链接、拒绝)2021-11-19 15:20:24.637 16474-16474/ W/ 访问隐藏 方法 Ljava/lang/ThreadLocal;->createInheritedMap(Ljava/lang/ThreadLocal$ThreadLocalMap;)Ljava/lang/ThreadLocal$ThreadLocalMap; (greylist-max-o,链接,拒绝) 可能是什么问题?

【问题讨论】:

  • 奇怪的是它会崩溃,因为撤销任何权限都会强制终止您的应用程序进程。您仍然没有提供任何关于您如何使用位置权限(活动?服务?框架或 api?)的上下文,所以不要指望人们猜测解决方案。
  • @Pawel 我正在我的 HomeActivity 中检查并授予权限。当我撤销权限时,最后一个打开的活动即将进行娱乐(HomeActivity),并且在重新创建活动时流程是正常的 - 即 onCreate、onStart、onResume() 等。这很好。但是,我怎么知道权限已从设置中撤消,我必须清除 Activity 的旧分配资源?希望您了解问题所在 - 这就是我在 Homeactivity 中的片段相互聚集的原因(几个片段)有没有办法清除活动资源?
  • 按照设计,您永远不应假定权限被永久授予,并且在每个组件生命周期中至少检查一次(每次创建时检查一次)。我不明白你在考虑什么分配的资源,如果你坚持认为权限被授予超出onDestroy 并使用它来假设它在重新创建之后仍然是一个错误。
  • 正如我所提到的,问题不在于权限,而在于 UI - 片段重叠。我正在发布解决方案。这很简单.. 一段时间后结帐。
  • 当您没有发布任何代码时,怎么会有人在您的 UI 方面提供帮助

标签: android kotlin permissions android-permissions user-permissions


【解决方案1】:

当我们从设置中撤消权限后返回我们的应用程序或恢复时, 最后一个 Activity 将被再次创建,即从 onCreate() 方法开始。

所以,为了解决这个问题,我们可以做一件事: 我们可以在 onCreate() 方法内部检查 isSavedInstanceState 是否为空?

如果它不为空,那么我们可以简单地完成()当前活动并启动 Splash 活动(这是任何 android 应用程序中的理想行为)

解决方案:

override fun onCreate(savedInstanceState: Bundle?) {
    try{
        super.onCreate(savedInstanceState)
        if (savedInstanceState != null) {
            startActivity(
                Intent(this@AppActivity, SplashActivity::class.java)
                    .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
            )
            finish()
        }else{
           //do your stuff - navigate to home activity
        }
    }catch(e:Exception)
    {
        e.printStackTrace()
    }
}

【讨论】:

    猜你喜欢
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2013-02-15
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多