Android 广播分为两个方面,广播发送者和广播接收者,通常情况下BroadcastReceiver指的就是广播接收者。 广播作为Android组件间的通讯方式,可以使用的场景如下: 1.同一App内部的同一组件之间的消息通讯,单个或多个线程之间。 2.同一App内部不同组件之间的消息通讯。 3.不同App之间的组件之间消息通讯。 4.Android系统在特定情况下与App之间消息通信。
自定义BroadcastReceiver
自定义广播接收器需要继承基类BroadcastReceiver,并实现抽象方法onReceive(context,context)方法。广播接收器接收到相应广播后,会自动回到onReceiver(…)方法。
public class MyBroadercastReceiver extends BroadcastReceiver{ public static final String TAG="MyBroadcastRececiver";//名称 @Override public void onReceive(Context context,Intent intent) { String name=intent.getStringExtra("name"); Log.e(TAG,"name:"+name); } }BroadcastReceiver注册类型
总体可以分为两中注册类型,静态注册和动态注册。 1.静态注册
<receiver android:enabled=["true" | "false"] android:exported=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:name="string" android:permission="string" android:process="string" > . . . </receiver>android:name --此broadcastReceiver类名 android:permission --如果设置,具有相应权限的广播发送方发送的广播才能被此broadcastReceiver所接受
常见的注册形式:
<receiver android:name=".MyBroadcastReceiver" > <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>2.动态注册:
动态注册时,无须再AndroidManifest中注册《receiver/》组件。直接在代码中通过调用Context的registerReceiver函数,可以在程序中动态注册
public class MainActivity extends Activity { public static final String BROADCAST_ACTION = "com.example.corn"; private BroadcastReceiver mBroadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBroadcastReceiver = new MyBroadcastReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(BROADCAST_ACTION); registerReceiver(mBroadcastReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(mBroadcastReceiver); } }