Cuando estamos trabajando en Xamarin.Forms tenemos que llegar a la parte nativa de cada plataforma, a la cual se les debe de brindar los permisos necesarios para cumplir con determinadas funciones, en este ejemplo, la de poder realizar una llamada en Android:
AndroidManifest–
<uses-permission android:name="android.permission.CALL_PHONE"/>
En donde se podia tener el siguiente código para
var intent = new Intent(Intent.ActionCall); intent.SetData(Uri.Parse("tel:" + number)); if (IsIntentAvailable(context, intent)) { context.StartActivity(intent); return true; }
Pero al ejecutar y estar trabajando en un dispositivo físico con el SDK 23, aparece la siguiente excepción:
¿Que es lo que sucede?
Android 6 (SDK 23) permite a los usuarios revocar permisos de una aplicación, así que debemos de poder ser capaces de hacer frente a esta situación, para esto, en android 6.0 (Api lvl 23) tenemos algo llamado “Runtime Permissions”.
Si el dispositivo está ejecutando Android 6.0 o superior y el SDK de destino de la aplicación es 23 o superior: La aplicación debe enumerar los permisos en el manifiesto y debe solicitar cada permiso peligroso que necesita mientras se ejecuta la aplicación. El usuario puede conceder o denegar cada permiso, y la aplicación puede seguir ejecutándose con capacidades limitadas incluso si el usuario niega una solicitud de permiso.
En este caso , lo único que debemos de hacer es cambiar de ActionCall a ActionDial, puesto que esta ya que no necesita permiso para ejecutar la acción.
Intent.ActionDial
Por ultimo solo es necesario borrar las carpetas bin y obj de nuestro proyecto de Android, realizar un “Clean Solution” y volver a compilar.
Para mayor información les recomiendo le echen un vistazo a la documentación.
Espero esto les haya ayudado, y recuerden, cualquier duda o comentario relacionado al desarrollo de aplicaciones con Xamarin.Forms, usen el #DevXamBlack en Twitter.
Hasta la próxima!.