我有一个SMSreceiver类,我是android的新手,现在我的问题是可以从该类调用其他类中的任何方法。基本上我要做的是将每个收到的消息添加到链接的字符串列表中。这是我的代码......
public class SMSReceiver extends BroadcastReceiver {
/**
* @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent)
*/
static List<String> recNumList = new LinkedList<String>();
static String message;
static Integer count = 0;
static String phoneNum;
static String newMessage = null;
List<String> recMsgs;
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Object messages[] = (Object[]) bundle.get("pdus");
SmsMessage smsMessage[] = new SmsMessage[messages.length];
for (int n = 0; n < messages.length; n++) {
smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
}
phoneNum = smsMessage[0].getDisplayOriginatingAddress();
message = smsMessage[0].getMessageBody() + "\n" +
"Time Stamp:" + smsMessage[0].getTimestampMillis();
recMsgs.add(message);
}
}
但是申请人关闭并且没有添加任何内容。有人能帮帮我吗?
答案 0 :(得分:0)
嗯,首先,您不应该将sms添加到广播接收器中的数组,因为它将在100毫秒内回收,所以如果您想要跟踪短信列表,您需要创建一个在后台运行的服务。
或者,您可以使用以下命令将短信保存到sharedPreferences:
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences();
// i always use default, though it isn't necessarily convention, I don't think;
SharedPreferences.editor editor = pref.edit();
editor.putString("msg", message);
editor.commit();
//issue with that is, then every time you add a new sms to the shared Preferences
// the previous one will be overridden. Resolving that is not something I will cover here
您获得nullpointerexception的原因是因为您的recMsgs永远不会被初始化。在onReceive()中使用以下内容执行此操作,但如果需要维护数组,则应该将其迁移到服务中:
recMsgs = new ArrayList<String>;
然后对recMsgs.add(...)的任何调用都将正常工作
我认为无论如何都可能成为问题。