广播的作用:
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));
}