代码之家  ›  专栏  ›  技术社区  ›  Devrath

在Android中从应用程序启动拨号程序会出错。

  •  0
  • Devrath  · 技术社区  · 7 年前

    我正在尝试从我的应用程序拨号用户在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 }
    
    4 回复  |  直到 7 年前
        1
  •  2
  •   Murad Asgarov    7 年前

    这样试试。

    val callIntent = Intent(Intent.ACTION_DIAL)
    callIntent.setData(Uri.parse("tel:" + phone_number));
    
        2
  •  0
  •   Manohar    7 年前

    使用此函数,确保您对 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()
        }
    
    }
    
        3
  •  0
  •   vikas kumar    7 年前

    我建议您删除这个硬编码的包,而只是使用打开拨号程序的通用意图,因为这将调用可用的意图而不是给定的意图。

    或者您只需在处理“找不到活动”异常后将此代码放在下面。

    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); 
    
            }
        }
    
        4
  •  0
  •   Mohit    7 年前

    我们可以直接呼叫行动拨号。

                val phone = "+919898989898"
                val intent = Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phone, null))
                startActivity(intent)
    

    参考文献: https://stackoverflow.com/a/18973484/2553615