广播接收者BroadcastReceiver

1.广播接收者 BroadcastReceiver(四大组件之一)
广播的作用:
a.在不同的应用之间实现数据的传递和共享 
b.在同一个应用中,不同组件中实现数据的传递

接收系统发送的广播:
a.开机
b.网络状态的切换 
c.电量的改变
d.收到短信   ---》拦截短信(垃圾)  
写一个广播接收者,频道调成跟系统收到短信发送的广播一致,然后将优先级设为最高,当它接收到垃圾短信后,就屏蔽
e.来电话
..........

2. * 广播的分类:
 * 1.普通广播 Context.sendBroadcast
 *      普通 广播的发送是异步的,所有的接收者接收的顺序是不一定的,这一种发送的方式效率高,
 *      但是广播接收者不能够在广播中增加数据,也不能终止广播
 *      
 * 2.有序广播 Context.sendOrderedBroadcast
 *      有序广播的发送是有顺序的,这个顺序由广播接收者Intent-Filter上面的android:priority 属性来决定
 *      android:priority 优先级的范围是从-1000至1000,数字越大表示优先级越高
 *      
 *      有序广播的效率相对普通广播来说要低,但是有序广播可以前面的接收者可以增加数据传递给下一个接收者,也可以终止广播的传递。
 *      
 * 
 * 广播的注册方式:
 * 1.静态注册(常驻型注册)  将广播接收者注册到清单文件中,广播接收者是由系统来维护,即使你的应用程序没有启动,它也能响应
 *     广播接收者默认是可以接收其它应用程序发送过的广播,如果你不想接收其它应用程序发送过来的广播,android:exported="false"
 *
 * 2.动态注册(非常驻型注册)  广播接收会绑定到某个组件上,如果这个组件销毁,那么它也必须解绑
 *      一般来说在,onResume方法里面Context.registerReceiver() ,然后在onPause方法里面unregisterReceiver(receiver)
 * 
 

LocalBroadcastManager  本地广播(广播只会在本应程序中传递,只能在本应用程序中接收到这个广播,相比全局广播,更安全,更高效)


上代码:

public class MainActivity extends Activity
{


    private TextView mTvBattery;
    private BatteryBroadcastReceiver mReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mTvBattery = (TextView) findViewById(R.id.textView1);
    }


    
    //发送普通广播
    public void sendNormalBroadcast(View view)
    {
        //Intent intent = new Intent(this, MyReceiver1.class);
        //com.broad.receiver_1 发送的广播的频道
        Intent intent = new Intent("com.broad.receiver_1");
        intent.putExtra("msg", "Hello Normal Broadcast!!!");
        this.sendBroadcast(intent);
    }
    
    //发送有序广播
    public void sendOrderedBroadcast(View view)
    {
        Intent intent = new Intent("com.broad.receiver_1");
        intent.putExtra("msg", "Hello Order Broadcast!!!");
        sendOrderedBroadcast(intent,null);
    }
    
    
    //动态注册一个广播,用来接收系统电量的改变
    @Override
    protected void onResume()
    {
        /*
         * 参一:广播接收者
         * 参二:意图过滤器(调频道)
         */
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_BATTERY_CHANGED);
        mReceiver = new BatteryBroadcastReceiver();
        registerReceiver(mReceiver, filter);
        super.onResume();
    }
    
    //解除注册
    @Override
    protected void onPause()
    {
        unregisterReceiver(mReceiver);
        super.onPause();
    }
    
    
    //监听电量的改变
    class BatteryBroadcastReceiver extends BroadcastReceiver
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            //电池当前的电量 
            int value = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
            //电池的总量
            int total = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 1);
            
            mTvBattery.setText("当前电量:"+value+"/"+total);
        }
        
    }
    
    
    //跳转
    public void goLocalBroadcast(View view)
    {
        startActivity(new Intent(this,SecondActivity.class));
    }

猜你喜欢

转载自blog.csdn.net/tiantianios/article/details/78117434