Prueba de unidad Android SMS Receiver

Trato de escribir una prueba de unidad en un BroadcastReceiver que se informa cuando se recibió un SMS. No está destinado a ser la aplicación predeterminada. En su lugar sólo necesito esto para una autenticación de dos factores. Para este caso he creado una PDU con [1].

Pero cuando lo paso abajo al BroadcastReceiver el nr del teléfono del remitente nunca consigue leído por androide es apenas null. Se devuelve el texto del cuerpo.

@TargetApi(Build.VERSION_CODES.KITKAT) @Test public void testOnReceive() throws Exception { final byte[] decodedPDU = BaseEncoding.base16().decode(PDU); final ReceiveSmsBroadcastReceiver receiveSmsBroadcastReceiver = spy(new ReceiveSmsBroadcastReceiver(true)); final Intent intent = new Intent(); intent.putExtra("format",SmsConstants.FORMAT_3GPP); intent.putExtra("pdus", new Object[]{decodedPDU}); intent.setAction("android.provider.Telephony.SMS_RECEIVED"); intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, 1); receiveSmsBroadcastReceiver.onReceive(InstrumentationRegistry.getTargetContext(), intent); 

En el receptor hago esto para conseguir los objetos SMSMessage:

 @TargetApi(Build.VERSION_CODES.KITKAT) private void getSMSKitKat(final Context context, final Intent intent) { final SmsMessage[] messagesFromIntent = Telephony.Sms.Intents.getMessagesFromIntent(intent); 

Recibo una matriz de SmsMessage aquí, el mensaje del cuerpo es correcto. Pero necesito probar mi número de teléfono del remitente del cheque antes de que pueda notificar a la UI que el SMS es recibido: Pero nr es siempre null aquí:

 private boolean isCorrectSender(@Nullable final SmsMessage message) { if (message == null) { return false; } final String nr = message.getOriginatingAddress(); 

¿Puede alguien señalarme lo que está mal aquí?

PS: SMSConstants y PhoneConstants son todas las clases marco que tomé de AOSP para que se ejecute porque las API no son públicas

[1] http://twit88.com/home/utility/sms-pdu-encode-decode

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.