广播介绍
在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。我们拿广播电台来做个比方。我们平常使用收音机收音是这样的:许许多多不同的广播电台通过特定的频率来发送他们的内容,而我们用户只需要将频率调成和广播电台的一样就可以收听他们的内容了。Android中的广播机制就和这个差不多的道理。
广播作用以及机制
其实BroadcastReceiver就是应用程序间的全局大喇叭,即通信的一个手段, 系统自己在很多时候都会发送广播,比如电量低或者充足,刚启动完,插入耳机,输入法改变等, 发生这些时间,系统都会发送广播,这个叫系统广播,每个APP都会收到,如果你想让你的应用在接收到 这个广播的时候做一些操作,比如:系统开机后,偷偷后台跑服务哈哈,这个时候你只需要为你的应用 注册一个用于监视开机的BroadcastReceiver,当接收到开机广播就做写偷偷摸摸的勾当~ 当然我们也可以自己发广播,比如:接到服务端推送信息,用户在别处登录,然后应该强制用户下线回到 登陆界面,并提示在别处登录当然,这些等下都会写一个简单的示例帮大家了解广播给我们带来的好处.
项目中广播使用
BroadCastReceiver广播接受者,安卓四大组件之一
广播三要素:
(1)广播发送者 : 发送广播
(2)广播接收者(调频): 用于接收广播
(3)要处理的事情 :处理广播的相关信息, Intent有图对象
广播的使用场景:
(1)同一APP下多个组件之间传递数据(Activity/Fragment/Service之间传递数据)
(2)2个APP之间传递数据
技能get点:
(1)自定义广播接受者
(2)使用广播接受者进行电话拦截和短信拦截和系统电量的变化
广播生命周期
静态注册和动态注册的区别:假如说Activity是接受者:
动态注册:
(1)广播会跟Activity的生命周期的结束而结束;
(2)自由的控制注册和取消,有很大的灵活性
静态注册:
(1)广播不会跟随Activity的生命周期的结束而结束,一直存在,即使应用程序关闭,也会被唤醒接受广播
(2)全局的广播
广播的分类
无序广播发送 (也叫标准广播)
静态加载
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.zhoujiayin"></action>
</intent-filter>
</receiver>
public class MainActivity extends AppCompatActivity {
private Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("com.example.zhoujiayin");
Bundle bundle = new Bundle();
bundle.putInt("lll",123);
intent.putExtras(bundle);
sendBroadcast(intent);
}
});
}
Receiver
public class MyReceiver extends BroadcastReceiver {
private static final String TAG = "MyReceiver";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("com.example.zhoujiayin")){
Bundle extras = intent.getExtras();
Object lll = extras.get("lll");
Log.i(TAG, "onReceive: "+lll);
}
}
}
动态加载
MyReceiver myReceiver = new MyReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.example.zhoujiayin");
registerReceiver(myReceiver,intentFilter);
有序广播
public class MainActivity extends AppCompatActivity {
private Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("com.example.zhou");
sendOrderedBroadcast(intent,null);
}
});
}
}
public class MyReceiver1 extends BroadcastReceiver {
private static final String TAG = "MyReceiver1";
@Override
public void onReceive(Context context, Intent intent) {
if (isOrderedBroadcast()){
// abortBroadcast();
}
Log.i(TAG, "onReceive: "+"11111");
}
}
public class MyReceiver2 extends BroadcastReceiver {
private static final String TAG = "MyReceiver2";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "onReceive: "+"2222");
}
}