参看了mars的资料,建了一个广播机制程序,发现有点问题,注册BroadcastReceiver能正常接收广播机制,但是取消BroadcastReceiver注册之后还能接收发送的短消息:
错误信息:
查看api文档的 Receiver Lifecycle:
A BroadcastReceiver object is only valid for the duration of the call to onReceive(Context, Intent)
. Once your code returns from this function, the system considers the object to be finished and no longer active.
正常的话取消了BroadcastReceiver的注册,广播(发送信息)系统就不能收到了,实验时还是可以收到。不知道错在哪里了,小弟刚刚接触android,请大侠们多多指点,谢谢O(∩_∩)O~
两个类主要代码如下:
BrocastActivity.java
import android.app.Activity;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class BrocastActivity extends Activity {
private Button button01 = null;
private Button button02 = null;
private SMSReviever smsReceiver = null;
private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button01 = (Button) findViewById(R.id.button01);
button01.setOnClickListener(new RegisterReceiverListener());
button02 = (Button) findViewById(R.id.button02);
button02.setOnClickListener(new UnRegisterReceiverListener());
}
class RegisterReceiverListener implements OnClickListener {
public void onClick(View arg0) {
//生成一个BroadcastReceiver对象
smsReceiver = new SMSReviever();
//生成一个IntentFilter对象
IntentFilter filter = new IntentFilter();
//为IntentFilter 添加ACTION
filter.addAction(SMS_ACTION);
//注册BroadcastReceiver对象到系统当中
BrocastActivity.this.registerReceiver(smsReceiver, filter);
}
}
class UnRegisterReceiverListener implements OnClickListener {
public void onClick(View v) {
//取消注册BroadcastReceiver
BrocastActivity.this.unregisterReceiver(smsReceiver);
}
}
}
SMSReviever.java
public SMSReviever() {
System.out.println("brocast receivered!");
}
@Override
public void onReceive(Context content, Intent intent) {
System.out.println("brocast receivered!");
Bundle bundle = intent.getExtras();
Object[] myObjectpdus = bundle.getStringArray("pdus");
SmsMessage[] smsMessage = new SmsMessage[myObjectpdus.length];
System.out.println("smsMessage "+smsMessage.length);
for(int i =0;i<myObjectpdus.length;i++){
smsMessage[i] = SmsMessage.createFromPdu((byte[])myObjectpdus[i]);
System.out.println(smsMessage[i].getDisplayMessageBody());
}
}