2015-10-14 91 views
-1

在我的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开发中是一个新手。所以任何帮助将不胜感激。

+0

'getIntent()'!='intent'。 – njzk2

回答

1

您正在使用Activity意图与方法getIntent()代替onReceive意图

变化getIntent()intent

String numbers[] = intent.getStringArrayExtra(SMSReceiver.SMS_BROADCAST_EXTRA);