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.
- Menú contextual de Android SMS
- Envío de sms a varias personas en android
- ¿Cómo reenviar sms a contactos seleccionados a whatsapp desde mi aplicación de Android?
- SGS-3 bug relacionado con la lista de conversaciones SMS?
- Envío de SMS mediante programación a varias personas obteniendo un error genérico
@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
- Android - Receptor de SMS Broadcast
- Diferenciar los informes de entrega de dos SMS separados
- enviar SMS Intent en Android
- SMS enviados / entregados: ¿cómo identificas a qué SMS pertenece la emisión?
- SMS BroadCast Receptor recibe muchas veces?
- Android: configurar el tono de notificación de SMS
- Cómo obtener el número smsc de un teléfono en android?
- ¿Cómo enviar un SMS usando SMSmanager en Dual SIM móvil?
- ¿Es posible que dos instancias de la misma aplicación android exista simultáneamente?
- ¿Cuál es una buena manera de probar los métodos onMeasure / onLayout / onDraw de una vista personalizada?