额外总是返回null在registerreceiver
问题描述:
在我的Android应用程序,我希望能够通知一个活动,当我收到一条短信,并给这个活动发件人的号码。为了实现这个目标,我使用了BroadcastReceiver类,收集SMS发送者的电话号码并以广播方式发送。额外总是返回null在registerreceiver
public class SMSReceiver extends BroadcastReceiver {
final public static String SMS_BROADCAST = "myapp.BROADCAST_SMS";
final public static String SMS_BROADCAST_EXTRA = "myapp.GET_SMS";
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras == null)
return;
Object[] pdus = (Object[]) extras.get("pdus");
SmsMessage Sms[] = new SmsMessage[pdus.length];
String numbers[] = new String[pdus.length];
//get the sms's
for (int i = 0; i < pdus.length; i++) {
Sms[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
String sender = Sms[i].getOriginatingAddress();
numbers[i] = sender;
}
//pass the number array to my activity via an intent.
Intent intent2 = new Intent(SMS_BROADCAST);
intent2.putExtra(SMS_BROADCAST_EXTRA, numbers);
LocalBroadcastManager.getInstance(context).sendBroadcast(intent2);
}
}
这里是我注册接收器在我的活动。我收到意图,但字符串“数字”的数组始终为空。如果我试图用它做什么,我总是有一个空指针异常。
@Override
public void onResume() {
super.onResume();
IntentFilter intentFilter = new IntentFilter(SMSReceiver.SMS_BROADCAST);
BroadcastReceiver SmsReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(SMSReceiver.SMS_BROADCAST)) {
String numbers[] = getIntent().getStringArrayExtra(SMSReceiver.SMS_BROADCAST_EXTRA);
if (numbers == null) {
// This always appears in the log !!!
Log.d("NUMBERS", "IS NULL");
return;
}
// do something with the numbers
}
}
};
LocalBroadcastManager.getInstance(this).registerReceiver(SmsReceiver, intentFilter);
}
我仍然看不到我做错了什么,但我在Android开发中是一个新手。所以任何帮助将不胜感激。
答
您正在使用Activity
意图与方法getIntent()
代替onReceive
意图
变化getIntent()
到intent
String numbers[] = intent.getStringArrayExtra(SMSReceiver.SMS_BROADCAST_EXTRA);
'getIntent()'!='intent'。 – njzk2