Android广播机制初识
Android中的每个应用程序都可以对感兴趣的广播进行注册,这样程序就会只接收到自己关心的广播(来自系统或是其他应用程序)。同时Android允许应用程序自由发送和接收广播。总的来说,Android通过Intent发送广播,通过Broadcast Receiver接收广播。
接收系统广播
接收广播需要接收器对相应广播进行注册,在代码中动态注册或是在AndroidManifest文件内静态注册。
动态注册步骤:
创建一个MyReceiver类 继承自BroadcastReceiver 并重写onReceive方法(接收到广播后将被调用),后在正确的位置(如onCreate方法中)对创建的MyReceiver实例用registerReceiver方法注册,例registerReceiver(myReceiver, intentFilter);intentFilter是IntentFilter的一个实例,在注册前需要向intentFilter中用 addAction方法加入相应的广播 ;动态注册的接收器后必须要在 取消注册 (在onDestory方法内调用UNregisterReceive方法)
代码实例:
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter; private MyReceiver myReceiver; ...onCreate(Bundle savedInstanceState) { ... intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); myReceiver = new MyReceiver(); registerReceiver(myReceiver, intentFilter); } ...onDestroy() { ... unregisterReceiver(myReceiver); } class MyReceiver extends BroadcastReceiver { ...onReceive(Context context, Intent intent) { Toast.makeText(context, "Network change detected.", Toast.LENGTH_SHORT).show(); } }
}
上述代码实例需要在AndroidManifest文件中声明网络访问权限后才可正确执行。
静态注册步骤:
在AndroidManifest对应的Receiver广播接收器receiver标签内的intent-filter标签下添加action标签并将name属性设置为希望接受的广播, 例如:
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>