如何将BroadcastReceiver调用到Activity

时间:2014-01-20 09:23:49

标签: android sms

您的要求是从特定号码接收短信。我想在textview中显示收到的消息。但我无法从我的活动中获取BroadcastReceiver的值。我不知道我犯了什么错误。请告诉我

我的代码是

SmsReceiver

public class SmsReceiver extends BroadcastReceiver {

public String str=null;

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub

    Bundle bundle = intent.getExtras();
    SmsMessage[] msgs = null;

    if (bundle != null) {

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

        for (int i = 0; i < msgs.length; i++) 
        {
            msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);

            //for get sms from special number===============================
            String msg_from = msgs[i].getOriginatingAddress();
            Log.v("msg_from >>",msg_from);     
            if(msg_from.equals("XXXXXXXX"))
            {
                //===============================
            str += "SMS from " + msgs[i].getOriginatingAddress();
            str += " :";
            str += msgs[i].getMessageBody().toString();
            str += "\n";    
            Intent act = new Intent(context, MainActivity.class);
            act.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            act.putExtra("message", str);
            context.startActivity(act);

            this.abortBroadcast();
            }

        }
        // ---display the new SMS message---
        // Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
    }

}
 } 

MainActivity

public class MainActivity extends Activity {

private TextView showText;
private String receivedSms;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Intent intent = getIntent();
    receivedSms =intent.getStringExtra("message");
    Log.e("mysms", receivedSms);
    showText = (TextView)findViewById(R.id.showText);
    showText.setText(receivedSms);
}   

  }

2 个答案:

答案 0 :(得分:0)

将此添加到您的清单文件中:

<uses-permission
android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission
android:name="android.permission.SEND_SMS"></uses-permission>

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

//在接收器类中

  

final Bundle bundle = intent.getExtras();试试{

if (bundle != null) {

    final Object[] pdusObj = (Object[]) bundle.get("pdus");

    for (int i = 0; i < pdusObj.length; i++) {

        SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
        String phoneNumber = currentMessage.getDisplayOriginatingAddress();

        String senderNum = phoneNumber;
        String message = currentMessage.getDisplayMessageBody();

    }
  }   
} 
catch (Exception e) {
e.printstacktrac(); 
}
     

将消息字符串传递给您的活动。

答案 1 :(得分:0)

尝试改变:

public String str=null;

为:

public String str="";

我建议改用StringBuffer并将字符串附加到其中。