BroadcastReceiver

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);
    }
}

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章