Android SMS意图。getMessagesFromIntent(意图)返回null

Android SMS意图。getMessagesFromIntent(意图)返回null,android,sms,Android,Sms,我正在尝试在Android上阅读短信。一切正常,但当我试图访问SmsMessage对象中的某些值时,出现错误: 12-29 17:41:58.762: E/AndroidRuntime(5545): java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.android.internal.telephony.SmsMessageBase.getDisplayOriginating

我正在尝试在Android上阅读短信。一切正常,但当我试图访问
SmsMessage
对象中的某些值时,出现错误:

12-29 17:41:58.762: E/AndroidRuntime(5545): java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.android.internal.telephony.SmsMessageBase.getDisplayOriginatingAddress()' on a null object reference
12-29 17:41:58.762: E/AndroidRuntime(5545):     at android.telephony.SmsMessage.getDisplayOriginatingAddress(SmsMessage.java:517)
我在AndroidManifest.xml中注册了Receiver,并通过扩展
BroadcastReceiver
创建了类
SmsReceiver

方法,其中我正在创建
SmsMessage
对象

private final SmsMessage[] getMessagesFromIntent(Intent intent) {

    Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
    byte[][] pduObjs = new byte[messages.length][];

    for (int i = 0; i < messages.length; i++) {
        pduObjs[i] = (byte[]) messages[i];
    }

    byte[][] pdus = new byte[pduObjs.length][];
    int pduCount = pdus.length;

    SmsMessage[] msgs = new SmsMessage[pduCount];
    for (int i = 0; i < pduCount; i++) {
        pdus[i] = pduObjs[i];
        msgs[i] = SmsMessage.createFromPdu(pdus[i]);
    }

    return msgs;
}    
我尝试了方法
Intents.getMessagesFromIntent(intent)
,但没有效果

我在AndroidManifest.xml中注册了Receiver,并通过扩展BroadcastReceiver创建了类SmsReceiver

由于您还没有发布您的AndroidManifest.xml,我假设您是这样注册您的接收者的

<receiver android:name=". SmsReceiver">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>
2.使用PDU(协议数据单元)–SMS消息的标准行业格式
这应该可以正常工作

您是否可以尝试检查
intent.getAction().equals(“android.provider.Telephony.SMS_RECEIVED”)
?在我的代码中是触发的操作:android.provider.Telephony.SMS_RECEIVED_ACTION@EduardFűzesséry您找到解决方案了吗?很抱歉没有早点回复。我确实找到了解决办法,有点。。。在我的例子中,所有这些都是因为我试图在没有任何gsm模块的平板电脑上进行调试……值得注意的是,第二个选项并没有将消息部分重新组装成单个消息。
<receiver android:name=". SmsReceiver">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>
for(SmsMessage message : Telephony.Sms.Intents.getMessagesFromIntent(intent)) { 
    if (message == null) { 
        Log.e(tag, "message is null"); 
        break; 
    } 
    smsOriginatingAddress = message.getDisplayOriginatingAddress();
    smsDisplayMessage = message.getDisplayMessageBody(); 
}
Object[] data = (Object[]) bundle.get("pdus");
for (Object pdu : data) {
    SmsMessage message = SmsMessage.createFromPdu((byte[]) pdu);
    if (message == null) {
        Log.e(tag, "message is null");
        break;
    }
    smsOriginatingAddress = message.getDisplayOriginatingAddress();
    smsDisplayMessage = message.getDisplayMessageBody();
}