【问题标题】:Fragment is reloaded each time after rejecting location permission每次拒绝位置权限后都会重新加载片段
【发布时间】:2019-08-16 13:53:35
【问题描述】:

我正在请求访问 Fragment 中 GPS 位置的权限,但是当我拒绝权限时 - 每次都会重新加载片段。当我接受许可时没关系,片段不会重新加载。

它以前工作得很好,但开始像这样。我已经在不同的设备上对其进行了测试:结果相同。可能是什么问题?

在清单中:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    override fun checkAndAskPermissions() {
        val permission = Manifest.permission.ACCESS_FINE_LOCATION
        if (ContextCompat.checkSelfPermission(context!!, permission) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(arrayOf(permission), LOCATION_REQUEST_CODE)
        } else {
            presenter.onPermissionsReceived()
        }
    }


    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        when (requestCode) {
            LOCATION_REQUEST_CODE -> {
                if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                    presenter.onPermissionsReceived()
                } else {
                    presenter.onPermissionsDenied()
                }              
            }
        }
    }

【问题讨论】:

  • 您应该在presenteronPermissionsDenied 函数上检查您的代码。
  • 我尝试删除该行,但结果相同,onRequestPermissionResult 方法有问题
  • 有趣....

标签: android kotlin permissions gps


【解决方案1】:

问题不在于 onRequestPermissionsResult 方法。问题出在活动的 onResume 方法上,该片段附加到该方法上。每次询问权限时都会调用活动的 onResume 方法。

【讨论】:

    【解决方案2】:

    创建一个不能多次触发的布尔条件

    override fun checkAndAskPermissions() {
        if(bool) {
           bool = false
           ....
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-14
      • 2021-01-18
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      相关资源
      最近更新 更多