来自(Object [])的NullPointer bundle.get(" pdus")

时间:2014-08-03 12:03:12

标签: android

使用以下代码

Object[] pdusObj = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdusObj.length];

但是,不知何故,由于pdusObj为null,我在第二行得到了一个空指针。我搜索了解决这个问题,但没有得到任何积极的结果。解决这个问题的任何链接或解释都非常有帮助。< / p>

这是注册服务的方式

        Intent i = new Intent(context, SMSReceiver.class);

        PendingIntent sender = PendingIntent.getBroadcast(context, 0, i, 0);

        // We want the alarm to go off 3 seconds from now.
        long firstTime = SystemClock.elapsedRealtime();
        firstTime += 2000;// start 3 seconds after first register.

        // Schedule the alarm!
        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime,300000, sender);// 5 min interval

2 个答案:

答案 0 :(得分:2)

假设您的SMSReceiver类是正确的,您需要为android.provider.Telephony.SMS_RECEIVED操作注册它,而不是为它启动广播。如果您只想在应用处于有效状态时监控短信,则可以使用registerReceiver()方法和相应的IntentFilter。如果要监视所有传入的SMS,则需要在清单中静态注册Receiver类,并使用适当的过滤器。

从您的评论中,您似乎想要在您的清单中注册此内容,您可以这样做:

<receiver android:name=".SMSReceiver">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

答案 1 :(得分:0)

Object[] pdusObj = new Object[] { (Object) bundle.get("pdus") };

这将创建一个包含对象的数组。 bundle.get("pdus")不会返回对象数组,而是返回对象。