BroadcastReceiver

注册BroadcastReceiver的方法有两种:

1、在应用程序的代码中进行注册

     如果一个BroadcastReceiver用于更新UI,那么通常会使用这种方法进行注册

      在Activity启动的时候注册BroadcastReceiver,在Activity不可见以后取消注册

      注册BroadcastReceiver:                       registerReceiver(receiver,filter);

      取消注册BroadcastReceiver:               unregisterReceiver(receiver);

2、在AndroidManifest.xml当中进行注册

        使用这样的方式注册BroadcastReceiver,即使应用程序没有启动,或者被kill掉后,也始终会处于活动状态, BroadcastReceiver还可以接收广播消息

[html] view plain copy
  1. <receiver android:name=".TestReceiver">  
  2.          <intent-filter>  
  3.              <action android:name="android.intent.action.PICK" />  
  4.          </intent-filter>  
  5.        </receiver>  
例程:在应用程序的代码中进行注册:


TestBC2Activity.Java

[java] view plain copy
  1. public class TestBC2Activity extends Activity {  
  2.     private Button registerButton = null;  
  3.     private Button unregisterButton = null;  
  4.     private SMSReceiver smsReceiver = null;  
  5.     private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";  
  6.       
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.main);  
  11.         registerButton = (Button)findViewById(R.id.register);  
  12.         unregisterButton = (Button)findViewById(R.id.unregister);  
  13.         registerButton.setOnClickListener(new OnClickListener() {  
  14.               
  15.             @Override  
  16.             public void onClick(View v) {  
  17.                 //生成一个BroiadcastReceiver对象  
  18.                 smsReceiver = new SMSReceiver();  
  19.                 //生成一个IntentFilter对象  
  20.                 IntentFilter filter = new IntentFilter();  
  21.                 //为IntentFilter添加一个Action  
  22.                 filter.addAction(SMS_ACTION);  
  23.                 //将BroadcastReceiver对象注册到系统当中  
  24.                 TestBC2Activity.this.registerReceiver(smsReceiver,filter);  
  25.                   
  26.             }  
  27.         });  
  28.         unregisterButton.setOnClickListener(new OnClickListener() {  
  29.               
  30.             @Override  
  31.             public void onClick(View v) {  
  32.                 //解除BroadcastReceiver对象的注册  
  33.                 TestBC2Activity.this.unregisterReceiver(smsReceiver);  
  34.                   
  35.             }  
  36.         });  
  37.     }  
  38. }  

SMSReceiver.java

[java] view plain copy
  1. public class SMSReceiver extends BroadcastReceiver {  
  2.     @Override  
  3.     public void onReceive(Context context, Intent intent) {  
  4.         System.out.println("receive message");  
  5.           
  6.         //接受Intent对象当中的数据  
  7.         Bundle bundle = intent.getExtras();  
  8.         //在Bundle对象当中有一个属性名为pdus,这个属性的值是一个Object数组  
  9.         Object[] myOBJpdus = (Object[]) bundle.get("pdus");  
  10.         //创建一个SmsMessage类型的数组  
  11.         SmsMessage[] message = new SmsMessage[myOBJpdus.length];  
  12.         System.out.println(message.length);  
  13.         for(int i = 0 ; i < myOBJpdus.length; i++){  
  14.             //使用Object数组当中的对象创建SmsMessage对象  
  15.             message[i] = SmsMessage.createFromPdu((byte[]) myOBJpdus[i]);  
  16.             //调用SmsMessage对象的getDisppalyMessageBody()方法,就可以得到消息的内容  
  17.             System.out.println(message[i].getDisplayMessageBody());  
  18.         }  
  19.     }  
  20.   
  21. }  

这个广播接收是测试接收短信,所以需要mainfest文件允许

[html] view plain copy
  1. <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>  
先按“register”按钮,注册BroadcastReceiver,即绑定监听器,然后再给模拟发短信

结果:

备注:

给模拟器发短信是使用Emulator Control

发布了34 篇原创文章 · 获赞 4 · 访问量 5万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章