如何注册BroadcastReceiver

时间:2012-01-12 07:35:20

标签: android android-intent

我是android的新手。我试图在主类中注册Broadcastreceiver来接收sms.But当我运行logcat时显示“接收广播意图中的错误”并且应用程序变为强制关闭。这是什么解决方案? 这是我的代码:

 public class Yes extends Activity {
/** Called when the activity is first created. */
private Retrieve receiver = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button start=(Button)findViewById(R.id.bt1);
start.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            receiver = new Retrieve();
                registerReceiver(receiver,new
                            IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

             }
           });
              }
             private class Retrieve extends BroadcastReceiver
               {

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]);
     smsMessage[0].getMessageBody();

    }

     // show first message
    Toast toast = Toast.makeText(context,
    "Received SMS: " + smsMessage[0].getMessageBody(), Toast.LENGTH_LONG);
    toast.show();
           }}

我放了一个开始按钮,我试图在该按钮内设置接收器。我在清单文件中提供权限以接收sms.i没有在manifest中写入意图过滤器。我认为我注册接收器的方式是完全错误的我想做。帮助我...

1 个答案:

答案 0 :(得分:0)

在您的外部活动中,创建广播(或将其作为单独的类写入):

private BroadcastReceiver smsReceiver = new BroadcastReceiver(){
public void onReceive(Context context, Intent intent) {
    //do your task
    }
}

在onClick上只注册接收器:

registerReceiver(smsReceiver, filter);