本例为动态创建广播接收者即不是在AndroidManifest.xml文件中定义的广播接收着
代码:
1 package com.qf.broadcastreceiver01; 2 3 import android.app.Activity; 4 import android.app.AlertDialog; 5 import android.content.BroadcastReceiver; 6 import android.content.Context; 7 import android.content.Intent; 8 import android.content.IntentFilter; 9 import android.os.BatteryManager; 10 import android.os.Bundle; 11 import android.util.Log; 12 import android.widget.TextView; 13 14 /** 15 * 接收系统广播(三大要素:广播的Action、接收广播的权限、广播中包含的数据) 1) 16 * 自定义广播接收器类,继承BroadcastReceiver,并重写onReceive()方法 2) 17 * 注册广播接收器,同时通过IntentFilter声明广播接收器可以接收的广播频道(Action) 3) 18 * 在广播接收的方法中,实现相关的操作(注:在UI线程中执行的) 19 * 20 * @author apple 21 * 22 */ 23 public class MainActivity extends Activity { 24 25 MyReciver myReciver; // 声明广播接收器的对象 26 27 TextView tv; 28 29 @Override 30 protected void onCreate(Bundle savedInstanceState) { 31 super.onCreate(savedInstanceState); 32 setContentView(R.layout.activity_main); 33 34 tv = (TextView) findViewById(R.id.msgId); 35 36 // 实例化广播接收器和IntentFilter(作用:声明可以接收的广播) 37 myReciver = new MyReciver(); 38 39 IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 40 // 增加可以接收的广播频道(Action) 41 filter.addAction(Intent.ACTION_BATTERY_LOW);// 低电量的广播 42 filter.addAction(Intent.ACTION_POWER_CONNECTED);// 电源连接的广播 43 filter.addAction(Intent.ACTION_POWER_DISCONNECTED);// 电源断开连接的广播 44 45 // 2. 注册广播接收器-接收系统的电量改变广播 46 registerReceiver(myReciver, filter); 47 } 48 49 50 /** 51 * 1. 自定义广播接收器<br> 52 * 在广播接收器的接收广播的方法中,可以实现以下功能:<br> 53 * <li>启动Activity 54 * <br><font color=blue>注:在全局的广播接收器中,启动的Activity时必须带有Intent.FLAG_NEW_TASK 55 * </font> 56 * <li>显示对话框,但必须存在Activity 57 * <li>启动Service 58 * <li>发送通知 59 * <li>弹出Toast 60 * 61 * @author apple 62 * 63 */ 64 65 class MyReciver extends BroadcastReceiver { 66 @Override 67 public void onReceive(Context context, Intent intent) { 68 // TODO 接收广播的方法--是在UI线程中执行的方法 69 // 3、 获取广播中的数据,并显示到UI控件 70 String action = intent.getAction();// 获取广播的Action 71 Log.d("debug", "---->" + action); 72 73 if (action == Intent.ACTION_BATTERY_CHANGED) { 74 // 获取电量的等级信息(百分比) 75 int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); 76 77 tv.setText("当前的电量(百分比):" + level); 78 if(level<10){ 79 //弹出电量过低的对话框 80 new AlertDialog.Builder(MainActivity.this) 81 .setTitle("提示") 82 .setIcon(R.drawable.ic_launcher) 83 .setMessage("当前电量过低,请插入电源或关机....") 84 .setPositiveButton("确定", null) 85 .setNegativeButton("取消", null) 86 .create().show(); 87 } 88 89 }else if(action==Intent.ACTION_POWER_CONNECTED){ 90 tv.setText("电源已连接:" ); 91 }else if(action==Intent.ACTION_POWER_DISCONNECTED){ 92 tv.setText("电源已断开连接:" ); 93 //启动InfoActivity组件 94 Intent infoIntent=new Intent(context,InfoActivity.class); 95 context.startActivity(infoIntent); 96 97 }else{ 98 tv.setText("电量过低!!!" ); 99 } 100 } 101 } 102 103 }