Android BroadcastReceiver 广播接收者
BroadcastReceiver用于接受Broadcast Intent,该Intent的发送是通过调用context.sendBroadcast()、context.sendOrderBroadcast()来实现的。通常一个广播Intent可以被订阅了该Intent的多个BroadcastReceiver所接收。
一、继承BroadcastReceiver并重写onReceive()方法。
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("MyBroadcastReceiver", "onReceive");
Log.i("MyBroadcastReceiver", intent.getStringExtra("txt"));
}
}
二、订阅广播Intent,有两种方式。
- 1.在Java代码中实现订阅:(其中的Action是为了过滤)
MyBroadcastReceiver myBroadcastReceiver= new MyBroadcastReceiver(); IntentFilter intetFilter = new IntentFilter( "com.zsf.broadcastreceiver_01.intent.action.MyBroadcastReceiver"); registerReceiver(myBroadcastReceiver, intetFilter); //unregisterReceiver(myBroadcastReceiver);
-
2.在AndroidManifest.xml中进行注册订阅:
<receiver android:name=".myBroadcastReceiver"> <intent-filter> <action android:name="com.zsf.broadcastreceiver_01.intent.action.MyBroadcastReceiver" /> </intent-filter> </receiver>
以下是完整Demo:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <Button android:id="@+id/btn_sendbroadcastreceiver" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:text="sendbroadcastreceiver" /> <Button android:id="@+id/btn_registerbc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/btn_sendbroadcastreceiver" android:layout_below="@+id/btn_sendbroadcastreceiver" android:text="btn_registerbc" /> <Button android:id="@+id/btn_unregisterbc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/btn_registerbc" android:layout_below="@+id/btn_registerbc" android:text="btn_unregisterbc" /> </RelativeLayout>
MyBroadcastReceiver.java
public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i("MyBroadcastReceiver", "onReceive"); Log.i("MyBroadcastReceiver", intent.getStringExtra("txt")); } }
MainActivity.java
public class MainActivity extends Activity { private Button btn_sendbroadcastreceiver; private Button btn_registerbc; private Button btn_unregisterbc; private MyBroadcastReceiver myBroadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_sendbroadcastreceiver = (Button) findViewById(R.id.btn_sendbroadcastreceiver); btn_registerbc = (Button) findViewById(R.id.btn_registerbc); btn_unregisterbc = (Button) findViewById(R.id.btn_unregisterbc); myBroadcastReceiver= new MyBroadcastReceiver(); btn_sendbroadcastreceiver.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Intent intent = new Intent(MainActivity.this, MyBroadcastReceiver.class); Intent intent = new Intent( "com.zsf.broadcastreceiver_01.intent.action.MyBroadcastReceiver"); intent.putExtra("txt", "hello"); sendBroadcast(intent); } }); btn_registerbc.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { IntentFilter intetFilter = new IntentFilter( "com.zsf.broadcastreceiver_01.intent.action.MyBroadcastReceiver"); registerReceiver(myBroadcastReceiver, intetFilter); } }); btn_unregisterbc.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { unregisterReceiver(myBroadcastReceiver); } }); } }