使用以下代码
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
答案 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")
不会返回对象数组,而是返回对象。