5

我尝试在收到短信时收到通知的 BroadcastReceiver 上编写单元测试。它并不意味着是默认应用程序。相反,我只需要这个进行两因素身份验证。对于这种情况,我使用 [1] 创建了一个 PDU。

但是当我将它传递给 BroadcastReceiver 时,Sender 的电话号码永远不会被 android 读取,它只是空的。返回正文。

@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 数组,正文消息是正确的。但我需要先测试我的支票发件人电话号码,然后才能通知 UI 收到短信:但此处 nr 始终为空:

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

4

0 回答 0