android开发 - BroadcastReceiver 广播接收者

Broadcast Receiver用于接收并处理广播通知(broadcast announcements)。

多数的广播是系统发起的,如地域变换、电量不足、来电来信等。程序也可以播放一个广播。

程序可以有任意数量的 broadcast receivers来响应它觉得重要的通知。

broadcast receiver可以通过多种方式通知用户:启动activity、使用NotificationManager、开启背景灯、振动设备、播放声音等,最 典型的是在状态栏显示一个图标,这样用户就可以点它打开看通知内容。

 

通常我们的某个应用或系统本身在某些事件(电池电量不足、来电来短信)来临时会广播一个Intent出去,我们可以利用注册一个Broadcast Receiver来监听到这些Intent并获取Intent中的数据。


广播接收者的生命周期就onReceive()方法,当该方法执行完后,返回,该广播接受者对象即可被销毁,结束了生命周期


一般使用方式,有静态注册,和动态注册


静态注册:

1.新建一个类继承BroadcastReceiver

   实现onReceive(Context context, Intent intent)方法,在这个方法里写你想做的操作的代码

2.在activity中声明一个静态变量

   private static final String action ="com.example.bcr.new_life";

3.然后对一个按钮或者其他的点击实现

    Intent intent = new Intent(action);
    sendBroadcast(intent);

4.然后在清单中加入

[java]  view plain copy print ?
  1. <receiver android:name="com.example.bcr.MyBroadcastReceiver" >  
  2.     <intent-filter >  
  3.         <action android:name="com.example.bcr.new_life" />  
  4.     </intent-filter>  
  5. </receiver>  
5.启动应用程序,即可看到点击按钮,接受者接收到信息,并且执行



动态注册

1.新建一个类继承BroadcastReceiver,并且实现onReceive(Context context, Intent intent)方法,在这里写你要写的代码

2.在activity中,

[java]  view plain copy print ?
  1. <span style="font-size:18px;">public class MainActivity extends Activity {  
  2.     private MyBroad broad;  
  3.     private static final String action ="com.example.bcr.new_life";  
  4.     @Override  
  5.     protected void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.activity_main);  
  8.     }  
  9.   
  10.     public void btn_register() {   
  11.         broad = new MyBroad();  
  12.         IntentFilter filerFilter =new IntentFilter(action<span style="font-family: Arial, Helvetica, sans-serif;">);</span>  
  13.         registerReceiver(broad, filerFilter);  
  14.     }  
  15.   
  16.     @Override  
  17.     protected void onPause() {   
  18.         super.onPause();  
  19.         unregisterReceiver(broad);  
  20.     }  
  21.   
  22. }</span>  
      有注册广播,就有注销广播

3.不用配置AndroidMenifest.xml,直接运行程序





下面来一个监听系统电量的案例

[java]  view plain copy print ?
  1. //申请电池状态  
  2. <uses-permission android:name="android.permission.BATTERY_STATS"></uses-permission>  
  3.   
  4. //创建一个继承BroadcastReceiver的类  
  5. public class MyBroad extends BroadcastReceiver {   
  6.     @Override  
  7.     public void onReceive(Context context, Intent intent) {  
  8.         if(intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)){  
  9.             int level = intent.getIntExtra("level"0);  
  10.             int total  = intent.getIntExtra("scale",100);  
  11.             Toast.makeText(context, "当前电量:"+(level*100)/total+"%", Toast.LENGTH_SHORT).show();  
  12.         }   
  13.     }   
  14. }  
  15.   
  16.   
  17. //在activity中交互时和应用程序暂停时的监听  
  18. public class MainActivity extends Activity {  
  19.     private MyBroad broad;  
  20.       
  21.     @Override  
  22.     protected void onCreate(Bundle savedInstanceState) {  
  23.         super.onCreate(savedInstanceState);  
  24.         setContentView(R.layout.activity_main);  
  25.     }  
  26.   
  27.     @Override  
  28.     protected void onResume() {   
  29.         super.onResume();  
  30.         broad = new MyBroad();  
  31.         IntentFilter filerFilter =new IntentFilter(Intent.ACTION_BATTERY_CHANGED);  
  32.         registerReceiver(broad, filerFilter);  
  33.     }  
  34.   
  35.     @Override  
  36.     protected void onPause() {   
  37.         super.onPause();  
  38.         unregisterReceiver(broad);  
  39.     }  
  40.   
  41. }  



第二个实例:开机启动

[java]  view plain copy print ?
  1. //申请启动权限  
  2.  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>  
  3.   
  4. //注册一个接收者  
  5.  <receiver android:name=".MyPower">  
  6.             <intent-filter>  
  7.                 <action android:name="android.intent.action.BOOT_COMPLETED"></action>  
  8.                 <category android:name="android.intent.category.HOME"></category>  
  9.             </intent-filter>  
  10.         </receiver>  
  11.   
  12.   
  13. //实现一个类继承广播  
  14. public class MyPower extends BroadcastReceiver {   
  15.     @Override  
  16.     public void onReceive(Context context, Intent intent) {  
  17.         Intent intent2 = new Intent(context,MainActivity.class);//这个类就是开机启动的第一个activity  
  18.         intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  19.         context.startActivity(intent2);  
  20.     }   
  21. }  

你可能感兴趣的:(android开发 - BroadcastReceiver 广播接收者)