首页 > 解决方案 > 如何从适配器调用 OnRequestPermissionResult 方法

问题描述

我想使用回收站视图中显示的号码拨打电话。

override fun onBindViewHolder(holder: MyViewholder, position: Int) {
    val currentItem = userlist[position]

    holder.txtFirstName.text = currentItem.firstName
    holder.txtLastName.text = currentItem.lastName
    holder.txtAge.text = currentItem.phonenumber.toString()
    num = currentItem.phonenumber.toString()

    holder.call.setOnClickListener {
        val number: String = currentItem.phonenumber.toString()
        if (ContextCompat.checkSelfPermission(
                context,
                android.Manifest.permission.CALL_PHONE
            ) != PERMISSION_GRANTED
        ) {
            ActivityCompat.requestPermissions(
                context as Activity,
                arrayOf(android.Manifest.permission.CALL_PHONE),
                REQUEST_CALL
            )
        } else {
            val dial = "tel:$number"
            val intent = Intent(Intent.ACTION_CALL, Uri.parse(dial))
            context.startActivity(intent)
        }
    }
}

我无法在适配器内覆盖 OnResquestPermissionResult()。

override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<out String>,
    grantResults: IntArray
) {
    if (requestCode == REQUEST_CALL) {
        if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            val number: String = num
            if (ContextCompat.checkSelfPermission(
                    context,
                    android.Manifest.permission.CALL_PHONE
                ) != PERMISSION_GRANTED
            ) {
                ActivityCompat.requestPermissions(
                    context as Activity, arrayOf(android.Manifest.permission.CALL_PHONE),
                    REQUEST_CALL
                )
            } else {
                onRequestPermissionsResult(requestCode,permissions,grantResults)
                val dial = "tel:$number"
                val intent = Intent(Intent.ACTION_CALL, Uri.parse(dial))
                context.startActivity(intent)
            }
        } else {
            Toast.makeText(context, "Permission Denied", Toast.LENGTH_SHORT).show()
        }
    }

}

如果我尝试在活动中覆盖 OnResquestPermissionResult(),我将无法从视图中传递当前电话号码。

标签: androidkotlinpermissionsadapter

解决方案


我删除了整个代码:

override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
    if (requestCode == REQUEST_CALL) {
        if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            val number: String = num
            if (ContextCompat.checkSelfPermission(
                    context,
                    android.Manifest.permission.CALL_PHONE
                ) != PERMISSION_GRANTED
            ) {
                ActivityCompat.requestPermissions(
                    context as Activity, arrayOf(android.Manifest.permission.CALL_PHONE),
                    REQUEST_CALL
                )
            } else {
                onRequestPermissionsResult(requestCode,permissions,grantResults)
                val dial = "tel:$number"
                val intent = Intent(Intent.ACTION_CALL, Uri.parse(dial))
                context.startActivity(intent)
            }
        } else {
            Toast.makeText(context, "Permission Denied", Toast.LENGTH_SHORT).show()
        }
    }

}

一切正常。


推荐阅读