ActivityNotFoundException al llamar a Intent.ACTION_CALL

Recibo ActivityNotFoundException cuando realizo la operación Intent.ACTION_CALL. Encontré muchos enlaces, pero todo esto no pudo resolver mi problema.

A veces me da la excepción como

 android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.CALL dat=tel:xxx-xxx-xxxx pkg=com.android.phone (has extras) } 

He utilizado el siguiente código en mi proyecto

 String contact_number="123456789"; Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:" + contact_number)); startActivity(callIntent); 

No hay ninguna garantía de que la intención dada se puede manejar (es decir, las tabletas pueden no tener aplicación de telefonía en absoluto). Si no hay ninguna aplicación con intent-filter intenciones que coincida con su intención, entonces se enfrentará a la excepción de ActivityNotFoundException . El enfoque adecuado es ser consciente de esto y utilizar try/catch para derrotar el accidente y recuperar adecuadamente:

 try { String contact_number="123456789"; Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:" + contact_number)); startActivity(callIntent); } catch (Exception e) { // no activity to handle intent. show error dialog/toast whatever } 

También debería usar ACTION_DIAL en ACTION_DIAL lugar, ya que ACTION_CALL requiere permiso adicional.

Debe comprobar si hay alguna actividad que maneje esta intención antes de iniciarla. Esto puede suceder si su aplicación se ejecuta en una tableta con sólo wifi y no tiene capacidad de teléfono. Además, si sólo desea iniciar el marcador, utilice mejor ACTION_DIAL que ACTION_CALL que realiza la llamada directamente desde su aplicación.

 final Intent dialIntent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:")); if (dialIntent.resolveActivity(context.getPackageManager()) != null) { // put your logic to launch call app here } 

He resuelto este problema. He utilizado el siguiente código

 String contact_number="123456789"; Intent callIntent = new Intent(Intent.ACTION_CALL); intent.setPackage("com.android.phone"); callIntent.setData(Uri.parse("tel:" + contact_number)); startActivity(callIntent); 

He reemplazado esta línea por Lollipop

 intent.setPackage("com.android.phone"); 

con

 intent.setPackage("com.android.server.telecom"); 

Este es mi código

 if (BuildUtil.isAndroidM()) { if (ActivityCompat.checkSelfPermission(mActivity, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(mActivity, PermissionUtil.requestPermissionFineAndCoarse(), PHONE_REQUEST_CODE); } } else { Intent callIntent = new Intent(Intent.ACTION_CALL); if (BuildUtil.isAndroidL()) { callIntent.setPackage("com.android.server.telecom"); } else { callIntent.setPackage("com.android.phone"); } callIntent.setData(Uri.parse("tel:" + phone)); startActivity(callIntent); } 
  • Cuándo llamar a response.body (). Close ()
  • API de calendario de Android vs API de proveedor de calendario
  • Diferentes firmas de apk en Android
  • Cómo obtener la versión más reciente de la aplicación de Google PlayStore en caso de que se haya cargado el archivo mutiple apk
  • Excepción de SDK de Google Drive
  • Android: Null Pointer Excepción al llamar a una nueva intención
  • Icono de elemento del cajón de navegación que no muestra el color original
  • Android obtiene el tipo de vista
  • Biblioteca java vs biblioteca android
  • Hacer parte de una cadena audaz en textview
  • Android Studio 0.8.2 URI tiene un componente de autoridad
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.