Android - Intercepting SMS - Interceptando SMS

En Android, Es posible tener acceso a los SMS entrantes, incluso antes que lleguen a la aplicación nativa que maneja los SMS. De esta forma podremos tomar acciones en base al contenido de ciertos SMS o al remitente de los mismos.
1. Primero que nada debemos especificar en el AndroidManifest.xml los permisos correspondientes a estas acciones.




Realmente la mas importante es la primera, podran prescindir de la segunda y tercera a no ser que deseen también enviar SMS.

2. Luego es necesario indicar en el AndroidManifest.xml que al recibir un SMS se ejecutará un Receiver.


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


Mediante ese código estamos indicando que cuando llegue un SMS se ejecutará el método onReceive(Context, Intent) de nuestra instancia MainReceiver.java, la cual necesariamente hereda de BroadcastReceiver

public class MainReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
        
            Bundle extras = intent.getExtras();
            
            if ( extras != null ){
                //SMS array
                Object[] smsExtra = (Object[]) extras.get( "pdus" );
                
                for ( int i = 0; i < smsExtra.length; ++i ){
                    SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]);                    
                    String body = sms.getMessageBody().toString();//Cuerpo 
                    String address = sms.getOriginatingAddress();//Remitente 
                }
                
                //En este punto ya se conoce el texto y el 
                //remitente del SMS como para tomar cualquier
                //acción que se desee en base a esos datos.
                                  
            }
        }   
    }


3. Si instalamos esta aplicación, esta no tendrá GUI, sino que cada en cada SMS recibido de ejecutará este código, donde se puede luego iniciar servicios, por ej.

Comments

  1. Como puedo acceder a la GUI desde onReceive() ?

    ReplyDelete

Post a Comment

Popular Posts