BroadcastReceiver的分幾種使用場景:全局調用、局部安全調用、動態註冊、有序、無序、幾種
1、靜態註冊
以監聽網絡變化爲例;
第一步,定義一個自己的receiver繼承BroadcastReceiver
public class ConnectivityChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager manager= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); //獲取代表聯網狀態的NetWorkInfo對象 NetworkInfo info=manager.getActiveNetworkInfo(); if (info==null){ Toast.makeText(context,"當前無網絡",Toast.LENGTH_SHORT).show(); return; } if (info.isConnected()){ Toast.makeText(context,info.getTypeName(),Toast.LENGTH_SHORT).show(); Log.e("info",info+""); if (info.getTypeName().equals("WIFI")){ Toast.makeText(context,"當前網絡爲wifi",Toast.LENGTH_SHORT).show(); } }else { Toast.makeText(context,"當前網絡未連接",Toast.LENGTH_SHORT).show(); } } }
第二步;在AndroidManifest.xml文件裏面進行註冊
<receiver android:name=".ConnectivityChangeReceiver"> <!-- 設置廣播類型,用於接收網絡狀態發生改變--> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"></action> </intent-filter> </receiver>
2、動態註冊且安全調用
第一步;同樣是先定義一個自己的receiver繼承BroadcastReceiver
public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) {
Toast.makeText(context,"hello",Toast.LENGTH_SHORT).show();}}
第二步;在Activity裏面進行註冊、調用並在onDestroy()方法中取消
public class MainActivity extends AppCompatActivity { private MyBroadcastReceiver receiver; //設置局部通知管理器 private LocalBroadcastManager broadcastManager; private IntentFilter filter; private Button bt_send; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); broadcastManager=LocalBroadcastManager.getInstance(this); //初始化廣播接收者 receiver=new MyBroadcastReceiver(); filter=new IntentFilter(); filter.addAction("com.myapp.mybroadcastreceiver.LOGIN_OTHER"); broadcastManager.registerReceiver(receiver,filter); bt_send=findViewById(R.id.bt_send); bt_send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent("com.myapp.mybroadcastreceiver.LOGIN_OTHER"); broadcastManager.sendBroadcast(intent); } }); } @Override protected void onDestroy() { super.onDestroy(); broadcastManager.unregisterReceiver(receiver); } }