为什么我在意图上出错? 我想在单击浮动按钮时拨打电话。
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
}
}
答案 0 :(得分:1)
这是因为ContextCompat.startActivity
使用三个参数Context
,Intent
和一个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)
ContextCompat.startActivity(intent)
,只需使用startActivity(intent)
,因为您已经处于活动状态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
}
}