Android:日常学习笔记(9)———探究广播机制

引入广播机制

Andorid广播机制

  广播是任何应用均可接收的消息。系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播。通过将 Intent 传递给 sendBroadcast()sendOrderedBroadcast() 或 sendStickyBroadcast(),您可以将广播传递给其他应用。

  Android提供了一套完整的API,允许应用程序自由地发送和接受广播。发送广播使用Intent,接受广播使用 广播接收器(Boradcast Receiver)

  广播分成两种类型:

  •   标准广播:一种完全异步的广播,在广播发出之后,所有的广播接收器几乎同时收到这条广播信息。
  •   有序广播:一种同步执行的广播,在广播发出之后,所有的接收器根据先后顺序依次收到,并且可以被截获。

接受系统广播

动态注册:在代码中注册

静态注册:在AndroidManifest.xml中进行声明

发送自定义广播

发送标准广播

1.首先定义了自己的广播接收器并且配置了广播名

public class MyReceiver extends BroadcastReceiver {

    @Override
public void onReceive(Context context, Intent intent) {
  Toast.makeText(context,"收到我自己发送的广播"+intent.getExtras().getString("info"),Toast.LENGTH_SHORT).show();
} }
        <receiver
android:name=".broadcast.MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.expample.zy.MY_BROADCAST"></action>
</intent-filter>
</receiver>

2.发送广播

                Intent broadCastIntent = new Intent("com.example.zy.MY_BROADCAST");
broadCastIntent.putExtra("info","你好啊");
sendBroadcast(broadCastIntent);

发送有序广播

0.设置接收器的优先等级

<intent-filter android:priority="100">
<action android:name="com.example.zy.MY_BROADCAST"></action>
</intent-filter>

1.发送有序广播

sendOrderedBroadcast(intent,null);

2.截获

public class MyReceiver extends BroadcastReceiver {

    @Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"收到我自己发送的广播"+intent.getExtras().getString("info"),Toast.LENGTH_SHORT).show();
abortBroadcast();
}
}

使用本地广播

实例  

public class MainActivity extends AppCompatActivity {
private LocalBroadcastManager localBroadcastManager;
private IntentFilter intentFilter;
private MyBroadCastReceiver myReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
localBroadcastManager = LocalBroadcastManager.getInstance(this);
//1.获取本地管理器实例

setContentView(R.layout.activity_main); intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
myReceiver = new MyBroadCastReceiver();
localBroadcastManager.registerReceiver(myReceiver,intentFilter);
//2.使用本地广播管理器进行动态注册 });
} @Override
protected void onDestroy() {
localBroadcastManager.unregisterReceiver(myReceiver);
//3.使用本地广播管理器动态卸载
super.onDestroy();
}
}
04-26 15:23
查看更多