Запуск звонилки из приложения в андроиде выдает ошибку - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь набрать пользователя из моего приложения, запускающего программу набора номера в 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 ]

0 голосов
/ 08 января 2019

Мы можем позвонить напрямую ACTION_DIAL.

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

ссылка: - https://stackoverflow.com/a/18973484/2553615

0 голосов
/ 08 января 2019

Используйте эту функцию, убедитесь, что у вас есть разрешение во время выполнения для 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()
    }

}
0 голосов
/ 08 января 2019

Я бы предложил вам удалить этот жестко запрограммированный пакет, вместо этого просто используйте общее намерение для открытия номеронабирателя, так как это вызовет доступное намерение вместо заданного.

Или просто поместите приведенный ниже код после обработки исключения «активность не найдена».

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); 

        }
    }
0 голосов
/ 08 января 2019

Попробуй вот так.

val callIntent = Intent(Intent.ACTION_DIAL)
callIntent.setData(Uri.parse("tel:" + phone_number));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...