【问题标题】:onRequestPermissionsResult() is not being called未调用 onRequestPermissionsResult()
【发布时间】:2020-11-30 13:01:21
【问题描述】:

我正在尝试从另一个片段内的对话片段拨打电话。但是,我的 onRequestPermissionsResult() 没有被调用,每当我选择允许或拒绝时,它都不会做出反应。这是我的代码:

private val PHONE_REQUEST_CODE = 100;
private lateinit var phonePermission: Array<String>

     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
             btnOk.setOnClickListener(this)
             btnCancel.setOnClickListener(this)
             dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
    phonePermission = arrayOf(android.Manifest.permission.CALL_PHONE)


}

    override fun onClick(v: View?) {
    when (v?.id) {
        R.id.btnOk -> {
            dismiss()
            makePhoneCall()
        }

        R.id.btnCancel -> {
            dismiss()
        }
    

    }
}


override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    if (requestCode == PHONE_REQUEST_CODE) {
      
          if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            val intent = Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "111 111 111"))
            startActivity(intent)
        
        }
    }

}


private fun makePhoneCall(){
    if (ContextCompat.checkSelfPermission(
            requireContext(),
            android.Manifest.permission.CALL_PHONE
        ) != PackageManager.PERMISSION_GRANTED
    ) {
        requestPermissions(
            phonePermission,
            PHONE_REQUEST_CODE
        )

    } else {
        val intent = Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "111 111 111"))
        startActivity(intent)
    }

}

}

我已经尝试了 stackoverflow 中针对类似问题提供的几种解决方案,例如仅将 ActivityCompat.requestPermissions() 替换为 requestPermissions()。但它仍然没有奏效。 提前致谢

【问题讨论】:

  • 似乎是this 问题的副本。你可以找到修复here
  • 您应该将onRequestPermissionsResult 方法移动到Fragment 的父活动中。

标签: android kotlin


【解决方案1】:

如果您的托管活动将 onRequestPermissionsResult 调用传递给基本活动,则会调用片段的“onRequestPermissionsResult”。

【讨论】:

  • 感谢您帮助我。此对话框片段由另一个片段而非活动托管
  • 基本上,我有一个带图标的主要片段。单击图标时,我正在使用确定和取消按钮调用对话框片段。点击ok时是询问权限,点击allow时不影响对话,不打电话。我必须再次单击对话框片段并再次拨打确定电话才能拨打电话。因此,根本没有调用 onRequestPermissionsResult,我通过 Logs 进行了检查
  • 你在调用谁的 requestPermissions 方法?活动或片段?
  • 调用片段的
  • 如果您确实需要权限回调,您可以调用“requestPermission”活动的方法或托管片段的方法。
【解决方案2】:

在片段父活动的onRequestPermissionsResult 上确保调用super.onRequestPermissionsResult

【讨论】:

    猜你喜欢
    • 2017-01-10
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多