我正在尝试从我的应用中拨打用户,从而在android中启动拨号器
我已提供清单权限:
<uses-permission android:name="android.permission.CALL_PHONE"/>
我还提供了运行时权限
代码:
private fun startPhoneDial(phoneNo: String) {
val callIntent = Intent(Intent.ACTION_CALL)
//callIntent.data = Uri.parse(phoneNo)
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
callIntent.setPackage("com.android.phone")
}else{
callIntent.setPackage("com.android.server.telecom")
}
callIntent.data = Uri.parse("tel:$phoneNo")
startActivity(callIntent)
}
错误堆栈跟踪:
Exception: Method threw 'android.content.ActivityNotFoundException' exception.
Message: No Activity found to handle Intent { act=android.intent.action.CALL dat=tel:xxxxxxxxxx pkg=com.android.phone }
答案 0 :(得分:2)
尝试这样。
val callIntent = Intent(Intent.ACTION_DIAL)
callIntent.setData(Uri.parse("tel:" + phone_number));
答案 1 :(得分:0)
使用此功能,确保您具有CALL_PHONE
的运行时权限
fun callANumber(context: Context, phoneNo: String) {
if (TextUtils.isEmpty(phoneNo)) {
return
}
val callIntent = Intent(Intent.ACTION_CALL)
callIntent.data = Uri.parse("tel:$phoneNo")
try {
context.startActivity(callIntent)
} catch (e: ActivityNotFoundException) {
Toast.makeText(context,"No Activity found which can handle intent",Toast.LENGTH_LONG).show()
}
}
答案 2 :(得分:0)
我建议您删除该硬编码包,而只需使用通用意图打开拨号程序,因为这将调用可用意图,而不是给定意图。
或者您可以在处理活动未找到异常之后将其放在下面的代码中。
private fun startPhoneDial(phoneNo: String) {
val callIntent = Intent(Intent.ACTION_CALL)
//callIntent.data = Uri.parse(phoneNo)
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
callIntent.setPackage("com.android.phone")
}else{
callIntent.setPackage("com.android.server.telecom")
}
callIntent.data = Uri.parse("tel:$phoneNo")
try{
startActivity(callIntent)
}
catch(exp : ActivityNotFoundException){
val intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:${phoneNo}"));
startActivity(intent);
}
}
答案 3 :(得分:0)
我们可以直接致电ACTION_DIAL。
val phone = "+919898989898"
val intent = Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phone, null))
startActivity(intent)
答案 4 :(得分:0)
因为这是相反的方式...在小于棒棒糖的版本中,它是:
com.android.phone
从棒棒糖开始的版本为:
com.android.server.telecom
因此,您应该像这样交换大于号:
private fun startPhoneDial(phoneNo: String) {
val callIntent = Intent(Intent.ACTION_CALL)
//callIntent.data = Uri.parse(phoneNo)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) {
callIntent.setPackage("com.android.phone")
}else{
callIntent.setPackage("com.android.server.telecom")
}
callIntent.data = Uri.parse("tel:$phoneNo")
startActivity(callIntent)
}