Bienvvenidos sean a este post, hoy continuaremos con receptor de anuncios y en el post de hoy nos centraremos mas en la posibilidad de iniciar una actividad desde estos. Una forma muy basica de interactuar de esta forma es cuando desde nuestro dispositivo pulsamos el cuadrado y nos muestra el listado de las aplicaciones que estan cargadas en memoria, donde por medio de una previsualizacion de ellas nos da la posibilidad de seleccionarla e ir hacia la misma.

Anuncios
Nota: En modelos viejos puede ser necesario tener apretado el boton de home (inicio o casa) durante un tiempo para que aparezca

Como vimos en otros posts no debemos confundir el concepto de tarea con aplicacion porque nosotros al pulsar un icono sobre la pantalla de inicio estamos ejecutando una nueva tarea, la cual puede implicar el inicio de una nueva aplicacion pero nosotros a su vez podemos llamar a otras aplicaciones desde una tarea y esta nueva aplicacion correra sobre la misma tarea, recordemos que cada tarea tiene a su vez una pila de actividades independientes a las cuales podemos ir con el boton de volver. Con esto aclarado procedamos a un ejemplo donde crearemos un nueva app con las siguientes caracteristicas:

  • Application Name: SMSEntrante
  • Domain Company: example.org
  • Minimum API SDK (Phone and Tablet)14
  • Add an ActivityEmpty Activity

Una vez creada nuestra app procederemos primero a modificar el archivo AndroidManifest.xml agregando primero este bloque dentro del bloque application:

<receiver android:name="ReceptorSMS">
    <intent-filter>
        <action 
                    android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

Esta modificacion nos dara la posibilidad de poder manipular la accion de recibir SMS, nuestra siguiente modificacion la agregaremos por fuera del bloque application:

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

Con esta modificacion concederemos permisos a la app para poder manejar la posibilidad de recibir los SMS. Nuestro siguiente paso sera crear un nuevo layout para poder llamarla cuando recibamos el SMS, para ello vaya a la res y layout, hacen click con el boton derecho y seleccionan New -> Layout resource file, en el campo Name pongan el valor smsrecibido, en Root element modifiquen el valor que tenga por LinearLayout, el resto debera quedar como aparece y pulsen Ok para generar el nuevo layout, una vez generado modificaremos el archivo con el siguiente codigo:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Acabas de recibir un SMS nuevo" />
</LinearLayout>

Este layout se encargara de mostrar un mensaje en pantalla, nuestro siguiente paso sera crear la clase Java para poder mostrar el layout recien creado, para ello deben hacer click con el boton derecho sobre el contenedor de clases Java, seleccionen New -> Java class, en el campo Name deben poner SmsRecibido, el resto debe quedar como aparece y pulsen Ok para crear la nueva clase, en la nueva clase reemplazaremos el codigo por el siguiente:

package org.example.smsentrante;

import android.app.Activity;
import android.os.Bundle;

public class SmsRecibido extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.smsrecibido);
    }
}
Nota: Si en el codigo anterior da un error o no encuentra al nuevo layout, vayan a File -> Sync Project with Gradle Files y sincronicenlo de nuevo.

Esta clase se encargara de mostrar en pantalla el contenido del layout antes creado, para ir finalizando nuestro nuevo layout debemos hacer una modificacion mas en AndroidManifest.xml para poder registrar la nueva actividad para ello dentro del bloque application ingresaremos el siguiente bloque:

<activity android:name=".SmsRecibido"
    android:label="Llego un nuevo Mensaje"
    android:theme="@android:style/Theme.DeviceDefault.Dialog" />

Con esta ultima modificacion, podremos utilizar nuestra clase como si fuese una actividad, veamos como quedo finalmente el archivo AndroidManifest.xml:

Anuncios
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.example.smsentrante">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action
                    android:name="android.intent.action.MAIN" />

                <category
                    android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name="ReceptorSMS">
            <intent-filter>
                <action
                    android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>
        <activity android:name=".SmsRecibido"
            android:label="Llego un nuevo Mensaje"
            android:theme="@android:style/Theme.DeviceDefault.Dialog" />
    </application>

    <uses-permission android:name="android.permission.RECEIVE_SMS" />
</manifest>

Con nuestro archivo modificado, nuestro nuevo layout creado procederemos a crear una nueva clase Java, para ello haremos click con el boton derecho sobre el contenedor de clases Java y seleccionamos New -> Java Class, cuando aparezca el nuevo cuadro modificaremos unicamente el campo Name con el valor ReceptorSMS, el resto debe quedar como aparece y pulsen Ok para poder crear la nueva clase.
Una vez creada la nueva clase modificaremos la clase con el siguiente codigo:

package org.example.smsentrante;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class ReceptorSMS extends BroadcastReceiver {

    @Override
    public void onReceive(Context contexto, Intent intento){
        Intent i = new Intent(contexto, SmsRecibido.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        contexto.startActivity(i);
    }
}

Esta clase sera la encargada de monitorear la llegada de un mensaje por SMS, y en caso de recibirlo llamara a la clase SmsRecibido y creara una nueva actividad y en este momento podemos probarlo. Como en el post de receptor de anuncios, probemos con el emulador para ello iremos al boton al costado del mismo, resaltado en la siguiente imagen

Una vez pulsado nos aparecera el siguiente cuadro

Como se ve en la imagen anterior debemos seleccionar la opcion Phone, ahi pasaremos al siguiente cuadro

En este cuadro deberan seleccionar la opcion resaltada, con esta opcion podran enviar el mensaje que ven en el cuadro, ese texto puede modificarse, con esto explicado ahora si procedamos a probar nuestra app como se ve en el siguiente video

Podemos ver como al llegar un mensaje la app nos muestra la notificacion en pantalla, esta es otra de las ventajas de usar un receptor de anuncios.

Anuncios

En resumen, hoy hemos visto como al receptor de anuncios puede ser utilizado para llamar a una actividad, en este caso hemos visto como al recibir un SMS nos llega una notificacion, tambien hemos visto como por medio del emulador podemos simular un mensaje de tipo SMS, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00