BroadcastReceiver接收电量变化的广播-------在代码中动态创建接受者

本例为动态创建广播接收者即不是在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 }
MainActivity.java
原文地址:https://www.cnblogs.com/bimingcong/p/4820489.html