Android開發網絡監聽封裝

首先弄個網絡廣播

NetworkChangeReceiver
public class NetworkChangeReceiver extends BroadcastReceiver {


private List<NetStateChangeObserver> mObservers = new ArrayList<>();
private int mType = -1;
private static boolean isRegister = false;

private static class InstanceHolder {
    private static final NetworkChangeReceiver INSTANCE = new NetworkChangeReceiver();
}

@Override
public void onReceive(Context context, Intent intent) {

    if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
        int connectivityStatus = NetworkUtil.getConnectivityStatus(context);
        notifyObservers(connectivityStatus);
    }

}

private static void registerReceiver(Context context) {
    if (!isRegister){
        IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        context.registerReceiver(InstanceHolder.INSTANCE, intentFilter);
        isRegister = true;
    }

}

private static void unRegisterReceiver(Context context) {
    if (isRegister) {
        context.unregisterReceiver(InstanceHolder.INSTANCE);
    }
}

public static void registerObserver(Context context,NetStateChangeObserver observer) {
    if (observer == null) {
        return;
    }
    if (!isRegister){
        registerReceiver(context);
        if (!InstanceHolder.INSTANCE.mObservers.contains(observer)) {
            InstanceHolder.INSTANCE.mObservers.add(observer);
        }
    }
}

public static void unRegisterObserver(Context context,NetStateChangeObserver observer) {
    if (observer == null) {
        return;
    }
    unRegisterReceiver(context);
    if (InstanceHolder.INSTANCE.mObservers == null) {
        return;
    }
    InstanceHolder.INSTANCE.mObservers.remove(observer);
}

private void notifyObservers(int networkType) {
    if (mType == networkType) {
        return;
    }
    mType = networkType;
    if (networkType == NetworkUtil.TYPE_MOBILE) {
        for (NetStateChangeObserver observer : mObservers) {
            observer.onMobileConnect();
            observer.onConnect();
        }
    } else if (networkType == NetworkUtil.TYPE_WIFI) {
        for (NetStateChangeObserver observer : mObservers) {
            observer.onWifiConnect();
            observer.onConnect();
        }
    } else {
        for (NetStateChangeObserver observer : mObservers) {
            observer.onDisconnect();
        }
    }
    ;
}

public interface NetStateChangeObserver {

    void onDisconnect();

    void onMobileConnect();

    void onWifiConnect();

    void onConnect();
}


}
使用示例:

第一步:

class MainActivity : BaseActivity<ActivityMainBinding, MainViewModel>(),NetworkChangeReceiver.NetStateChangeObserver

第二步:
在onCreate方法中:

NetworkChangeReceiver.registerObserver(mContext,this)

第三步:

 override fun onDisconnect() {
    Log.i("netChange","onDisconnect")
}

override fun onMobileConnect() {
    Log.i("netChange","onMobileConnect")
}

override fun onWifiConnect() {
    Log.i("netChange","onWifiConnect")
}

/**
 * @desc : 網絡連接上,不管是wifi還是數據
 * 
 **/
override fun onConnect() {}

在這裏面寫你的邏輯代碼即可。
第四步:
別忘了,在onDestroy註冊掉你的網絡監聽

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