我仍然不明白为什么我会出错:故意

时间:2019-06-09 08:17:45

标签: android kotlin

为什么我在意图上出错? 我想在单击浮动按钮时拨打电话。

ContextCompat.startActivity(intent),在这里获取错误(intent)

类型不匹配。 必需:上下文 找到:意图

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    setSupportActionBar(toolbar)

    fab.setOnClickListener { view ->
        Snackbar.make(view, "Secretariaat wordt gebeld", 
Snackbar.LENGTH_LONG)
            .setAction("Action", null).show()
        makePhoneCall("0123456")
    }

    val toggle = ActionBarDrawerToggle(
        this, drawer_layout, toolbar, R.string.navigation_drawer_open, 
R.string.navigation_drawer_close
    )
    drawer_layout.addDrawerListener(toggle)
    toggle.syncState()

    nav_view.setNavigationItemSelectedListener(this)
   }





fun makePhoneCall(number: String) : Boolean {
    try {
        val intent = Intent(Intent.ACTION_CALL)
        intent.setData(Uri.parse("tel:$number"))
        ContextCompat.startActivity(intent)
        return true
    } catch (e: Exception) {
        e.printStackTrace()
        return false
    }
}

3 个答案:

答案 0 :(得分:1)

这是因为ContextCompat.startActivity使用三个参数ContextIntent和一个Bundle作为额外选项(可以为空)

ContextCompat.startActivity(this, intent, null)

答案 1 :(得分:0)

如果您需要调用方法startActivity(),则可以不使用ContextCompat类。如果您在Activity类中调用此方法。在这种情况下,您的代码将类似于:

fun makePhoneCall(number: String) : Boolean {
    try {
        val intent = Intent(Intent.ACTION_CALL)
        intent.setData(Uri.parse("tel:$number"))
        startActivity(intent)
        return true
    } catch (e: Exception) {
        e.printStackTrace()
        return false
    }
}

答案 2 :(得分:0)

  1. 无需使用静态ContextCompat.startActivity(intent),只需使用startActivity(intent),因为您已经处于活动状态
  2. 要使用Intent.ACTION_CALL,您需要清单中的通话权限。
  

<uses-permission android:name="android.permission.CALL_PHONE"/>

我更喜欢另一种解决方案。使用Intent.ACTION_DIAL代替不需要许可的Intent.ACTION_CALL

您的代码应为:

fun makePhoneCall(number: String) : Boolean {
    try {
        val intent = Intent(Intent.ACTION_DIAL)
        intent.setData(Uri.parse("tel:$number"))
        startActivity(intent)
        return true
    } catch (e: Exception) {
        e.printStackTrace()
        return false
    }
}

More Info