靜態註冊就是在AndroidManifest.xml文件中定義,註冊的廣播接收器必須繼承BroadReceiverjava
動態註冊就是在程序中使用Context.registerReceiver註冊。android
發送廣播事件:經過Context.sendBroadcast來發送,由Intent來傳遞註冊時用到的Action。app
接收廣播:當發送的廣播被接收器監聽到後,會調用onReceive()方法,並將包含消息的Intent對象傳回。ide
使用案例:code
一、結構圖:xml
二、Sample2-1_Activity.java代碼以下:對象
package com.bn.ex2_1; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class Sample2_1_Activity extends Activity { private Button sendStaticButton; //發送自定義靜態註冊廣播的按鈕 private Button sendDynamicButton; //發送自定義動態註冊廣播的按鈕 private static final String STATICACTION = "com.bn.pp2.staticreceiver"; //靜態廣播的Action字符串 private static final String DYNAMICACTION = "com.bn.pp2.dynamicreceiver"; //動態廣播的Action字符串 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); sendStaticButton = (Button) findViewById(R.id.send_static); //獲取Button按鈕引用 sendDynamicButton = (Button) findViewById(R.id.send_dynamic); sendStaticButton.setOnClickListener(new DIYOnClickListener()); //爲Button按鈕添加監聽器 sendDynamicButton.setOnClickListener(new DIYOnClickListener()); } class DIYOnClickListener implements OnClickListener{ //內部類OnClick監聽器 public void onClick(View v) { if(v.getId() == R.id.send_static){ // 發送自定義靜態註冊廣播消息 Intent intent = new Intent(); intent.setAction(STATICACTION); //設置Action intent.putExtra("msg", "接收靜態註冊廣播成功!"); //添加附加信息 sendBroadcast(intent); //發送Intent } else if(v.getId() == R.id.send_dynamic){ // 發送自定義動態註冊廣播消息 Intent intent = new Intent(); intent.setAction(DYNAMICACTION); //設置Action intent.putExtra("msg", "接收動態註冊廣播成功!"); //添加附加信息 sendBroadcast(intent); //發送Intent }}} @Override protected void onStart() { super.onStart(); IntentFilter dynamic_filter = new IntentFilter(); dynamic_filter.addAction(DYNAMICACTION); //添加動態廣播的Action registerReceiver(dynamicReceiver, dynamic_filter); // 註冊自定義動態廣播消息 } private BroadcastReceiver dynamicReceiver //動態廣播的Receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals(DYNAMICACTION)){ //動做檢測 String msg = intent.getStringExtra("msg"); Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); }}};}
三、AndroidManifest.xml代碼以下:繼承
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.bn.ex2_1"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Sample2_1_Activity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 註冊自定義靜態廣播接收器 --> <receiver android:name=".StaticReceiver"> <intent-filter> <action android:name="com.bn.pp2.staticreceiver" /> </intent-filter> </receiver> </application> </manifest>
四、StaticReceiver.java代碼以下:事件
package com.bn.ex2_1; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class StaticReceiver extends BroadcastReceiver { @Override //靜態廣播接收器執行的方法 public void onReceive(Context context, Intent intent) { String msg = intent.getStringExtra("msg"); Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); }}
五、main.xml代碼以下:ip
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="24dip" android:gravity="center" android:text="BroadcastReceiver演示" /> <Button android:id="@+id/send_static" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="發送自定義靜態註冊廣播" /> <Button android:id="@+id/send_dynamic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="發送自定義動態註冊廣播" /> </LinearLayout>
六、運行截圖: