Тестирование Android-приемника Android

Я пытаюсь написать единичный тест на BroadcastReceiver, который получает информацию о получении SMS-сообщения. Он не предназначен для приложения по умолчанию. Вместо этого мне просто нужно это для двухфакторной аутентификации. Для этого случая я создал PDU с [1].

Но когда я передаю его в BroadcastReceiver, телефон nr Отправителя никогда не будет прочитан андроидом, это всего лишь нуль. Текст тела возвращается.

@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); 

В приемнике я делаю это, чтобы получить объекты SMSMessage:

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

Я получаю массив SmsMessage здесь, сообщение тела правильное. Но мне нужно проверить свой номер телефона отправителя проверки, прежде чем я могу уведомить пользовательский интерфейс о том, что полученное SMS: Но nr всегда здесь null:

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

Может кто-нибудь указать мне, что здесь не так?

PS: SMSConstants и PhoneConstants – это все классы инфраструктуры, которые я взял с AOSP, чтобы запустить его, потому что эти API не являются общедоступными

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

Intereting Posts