Android開發(fā)網絡監(jiān)聽封裝

首先弄個網絡廣播

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注冊掉你的網絡監(jiān)聽

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容