Llamadas en Android

Realizar llamadas y SMS en una aplicación

Android ofrece la posibilidad de realizar llamadas y mensajes de texto sin necesidad de salir de la aplicación mediante los llamados intents implícitos. Éstos nos permiten aprovechar ciertas funcionalidades como realizar llamadas o mensajes de texto requiriendo para ello los correspondientes permisos. 

REALIZAR LLAMADA

Una de las opciones se basa en realizar una llamada automática, es decir, que realiza la llamada directamente (ACTION_CALL) y otra de las opciones consiste en preparar una llamada, es decir, preparar la llamada con el número o contacto marcado lista para pulsar el botón de llamar (ACTION_DIAL).

Basicámente la diferencia para el usuario entre una y otra es que ésta última permite una última revisión antes de realizar la llamada, sin embargo, para el desarrollador existe otra diferencia, la llamada automática requiere de permisos mientras que la preparación de llamada no requiere de ningún permiso. Para ver la diferencia entre una y otra, a continuación se muestra un ejemplo muy básico de una aplicación con un único botón que al pulsarlo inicia la acción de cada una de las opciones de llamada y donde el número es introducido de forma directa.

activity_main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="//schemas.android.com/apk/res/android"
  3. xmlns:tools="//schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical"
  7. >
  8. <Button
  9. android:id="@+id/boton"
  10. android:layout_width="match_parent"
  11. android:layout_height="wrap_content"
  12. android:text="Llamar"
  13. />
  14. </LinearLayout>

Opción de llamada automática (ACTION_CALL)

En esta opción existe además otra diferencia en lo relativo a los permisos. Y es que hay que diferenciar entre la versión inferior a la 6.0 que se basta con un permiso en el AndroidManifest.xml y la versión 6.0 y superior que requiere de permisos extra que requieren confirmación la primera vez que realiza la acción .

AndroidManifest.xml

  1. <uses-permission android:name="android.permission.CALL_PHONE" />

MainActivity.java (versiones inferiores a 6.0)

  1. package xip.midominio.com.llamadas_sms;
  2. import android.content.Intent;
  3. import android.net.Uri;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.view.View.OnClickListener;
  9. public class MainActivity extends AppCompatActivity implements OnClickListener {
  10. Button boton;
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_main);
  15. boton = (Button) findViewById(R.id.boton);
  16. boton.setOnClickListener(this);
  17. }
  18. @Override
  19. public void onClick(View v) {
  20. switch (v.getId()) {
  21. case R.id.boton:
  22. llamar();
  23. break;
  24. default:
  25. break;
  26. }
  27. }
  28. private void llamar() {
  29. Uri uri = Uri.parse("tel:657747447");
  30. Intent intent = new Intent(Intent.ACTION_CALL, uri);
  31. startActivity(intent);
  32. }
  33. }

MainActivity.java (versiones 6.0 o superiores)

  1. package xip.midominio.com.llamadas_sms;
  2. import android.Manifest;
  3. import android.content.Intent;
  4. import android.content.pm.PackageManager;
  5. import android.net.Uri;
  6. import android.support.v4.app.ActivityCompat;
  7. import android.support.v7.app.AppCompatActivity;
  8. import android.os.Bundle;
  9. import android.view.View;
  10. import android.widget.Button;
  11. import android.view.View.OnClickListener;
  12. public class MainActivity extends AppCompatActivity implements OnClickListener {
  13. Button boton;
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.activity_main);
  18. boton = (Button) findViewById(R.id.boton);
  19. boton.setOnClickListener(this);
  20. }
  21. @Override
  22. public void onClick(View v) {
  23. switch (v.getId()) {
  24. case R.id.boton:
  25. llamar();
  26. break;
  27. default:
  28. break;
  29. }
  30. }
  31. private void llamar() {
  32. Uri uri = Uri.parse("tel:657747447");
  33. if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
  34. ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CALL_PHONE},225);
  35. return;
  36. }
  37. Intent intent = new Intent(Intent.ACTION_CALL, uri);
  38. startActivity(intent);
  39. }
  40. }

Opción de llamada preparada (ACTION_DIAL)

Esta opción de llamada no requiere de ningún permiso y la única diferencia respecto a la opción anterior es que la constante ACTION_CALL se sustituye por ACTION_DIAL.


  1. package xip.midominio.com.llamadas_sms;
  2. import android.content.Intent;
  3. import android.net.Uri;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.view.View.OnClickListener;
  9. public class MainActivity extends AppCompatActivity implements OnClickListener {
  10. Button boton;
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_main);
  15. boton = (Button) findViewById(R.id.boton);
  16. boton.setOnClickListener(this);
  17. }
  18. @Override
  19. public void onClick(View v) {
  20. switch (v.getId()) {
  21. case R.id.boton:
  22. llamar();
  23. break;
  24. default:
  25. break;
  26. }
  27. }
  28. private void llamar() {
  29. Uri uri = Uri.parse("tel:657747447");
  30. Intent intent = new Intent(Intent.ACTION_DIAL, uri);
  31. startActivity(intent);
  32. }
  33. }

ENVIAR SMS

El envío de mensajes de texto continúa el mismo estilo de la llamada preparada con la variación del Uri y el Intent y añadiendo el método putExtra que permite introducir el texto del mensaje.

activity_main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="//schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. >
  7. <Button
  8. android:id="@+id/boton"
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content"
  11. android:text="Enviar SMS"
  12. />
  13. </LinearLayout>

MainActivity.java

  1. package xip.midominio.com.llamadas_sms;
  2. import android.content.Intent;
  3. import android.net.Uri;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.view.View.OnClickListener;
  9. public class MainActivity extends AppCompatActivity implements OnClickListener {
  10. Button boton;
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_main);
  15. boton = (Button) findViewById(R.id.boton);
  16. boton.setOnClickListener(this);
  17. }
  18. @Override
  19. public void onClick(View v) {
  20. switch (v.getId()) {
  21. case R.id.boton:
  22. enviarSMS();
  23. break;
  24. default:
  25. break;
  26. }
  27. }
  28. private void enviarSMS() {
  29. Uri uri = Uri.parse("smsto:657747447");
  30. Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
  31. intent.putExtra("sms_body","Enviando SMS");
  32. startActivity(intent);
  33. }
  34. }


Comentarios: 0

Para poder comentar es necesario iniciar sesión



Este dominio utiliza cookies de terceros para crear estadísticas y publicidad personalizada. Si continúa navegando está aceptando su uso