当前位置:操作系统 > 安卓/Android >>

浅谈BroadcastReceiver的用法

最近看了下关于广播方面的东西,加深了理解,也纠正了自己以前的不正确的看法。
  关于广播有2中注册方式,一种是在代码中注册,也叫动态注册,另一种是在AndroidManifest里面注册,也叫静态注册。
  不管在哪个里面注册,都需要发送广播sendBroadcast()。广播发送的是一个Intent,intent里面一般是action。
  如果是在代码里面注册,一般在onResume()方法里面注册。
 @Override
     protected void onResume() {
         // TODO Auto-generated method stub
         
         myReceiver = new MyReceiver();
         IntentFilter filter = new IntentFilter();
         //向过滤器中添加action
          filter.addAction("com.android.shang");
         //注册广播
          registerReceiver(myReceiver, filter);
        
         Intent intent = new Intent();
         intent.setAction("com.android.xiang");
         //发送广播
          sendBroadcast(intent);
         super.onResume();
     }
  在onPause()方法里面要取消注册。
1 @Override
2     protected void onPause() {
3         // TODO Auto-generated method stub
4         unregisterReceiver(myReceiver);
5         super.onPause();
6     }
  当然,也可以在xml文件中注册:
 <receiver
         android:name=".MyBrocastReceiverTest">
         <intent-filter>
             <action    android:name="com.android.xiang"></action>
         </intent-filter>
     </receiver>
  如果发送的广播的action已经注册了,那么在onReceive()方法中就会接收到发过来的广播,继而做出一些处理。 www.zzzyk.com
  你可以写出一个内部类:
 1 class MyReceiver extends BroadcastReceiver {
 2
 3         @Override
 4         public void onReceive(Context context, Intent intent) {
 5             // TODO Auto-generated method stub
 6             //从这里的log中可以看到是否接受到了广播
 7             System.out.println("intent = " + intent);
 8         }
 9        
10     }
  当然也可以单独写一个类:
package com.android.TestBrocastReceiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyBrocastReceiverTest extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        System.out.println("intent = " + intent);
    }

}
  一般如果在代码里面注册,就把广播写在代码里面,在xml文件中注册就单独写一个类。
  注册在代码里面:
 package com.android.TestBrocastReceiver;
 
 import android.app.Activity;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.Bundle;
 
 public class TestBrocastReceiver extends Activity {
    
     MyReceiver myReceiver;
    
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
     }
 
     @Override
     protected void onPause() {
         // TODO Auto-generated method stub
         unregisterReceiver(myReceiver);
         super.onPause();
     }
 
     @Override
     protected void onResume() {
         // TODO Auto-generated method stub
        
         myReceiver = new MyReceiver();
         IntentFilter filter = new IntentFilter();
         //向过滤器中添加action
         filter.addAction("com.android.shang");
         //注册广播
         registerReceiver(myReceiver, filter);
        
         Intent intent = new Intent();
         intent.setAction("com.android.xiang");
         //发送广播
         sendBroadcast(intent);
         super.onResume();
     }
    
     class MyReceiver extends BroadcastReceiver {
 
         @Override
         public void onReceive(Context context, Intent intent) {
             // TODO Auto-generated method stub
             //从这里的log中可以看到是否接受到了广播
             System.out.println("intent = " + intent);
         }
     }
 }
  注册在xml文件中:
在xml文件中注册,写上一个广播类,然后在activity中发送广播就可以了。
有时系统会发出一些广播,比如说时间的变化等,时间走一秒就会发一个广播,这时我们可以监听这个广播,然后在接收器中做处理就可以了,而不需要在发广播了。


摘自 wangjia55的专栏

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,