You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin开发USSD拨号App时FirstFragment类型不匹配报错如何解决

问题原因

两个类型不匹配错误都出在权限校验和申请的代码行,核心原因是ActivityCompat.checkSelfPermission()要求传入Context参数、ActivityCompat.requestPermissions()要求传入Activity参数,但你传入的this是当前FirstFragment实例,Fragment本身既不是Context也不是Activity,因此触发类型错误。

修复方案

仅需要修改onViewCreated中权限相关代码的传参即可:

  1. ActivityCompat.checkSelfPermission的第一个参数从this替换为requireContext(),获取Fragment当前依附的有效Context实例
  2. ActivityCompat.requestPermissions的第一个参数从this替换为requireActivity(),获取Fragment当前依附的有效Activity实例

修改后的对应代码段如下:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    button.setOnClickListener {
        Toast.makeText(
            context,
            "You Clicked the Button",
            Toast.LENGTH_SHORT
        ).show()

        // 仅修改以下两行的第一个参数即可
        if(ActivityCompat.checkSelfPermission(requireContext(), android.Manifest.permission.CALL_PHONE)
            !=PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(
                requireActivity(),
                arrayOf(android.Manifest.permission.CALL_PHONE),
                REQUEST_PHONE_CALL
            )
        }
        else {
            startCall()
        }

    } // END button
}
额外优化建议
  • 权限回调中增加授权结果判断,避免用户拒绝权限后调用拨号逻辑崩溃:
override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<out String>,
    grantResults: IntArray
) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    if(requestCode == REQUEST_PHONE_CALL && grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        startCall()
    } else {
        Toast.makeText(requireContext(), "需要授予拨号权限才能使用该功能", Toast.LENGTH_SHORT).show()
    }
}
  • 确保你的AndroidManifest.xml中已经声明拨号权限:
<uses-permission android:name="android.permission.CALL_PHONE" />

内容的提问来源于stack exchange,提问作者mohdadawe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 01:24:03