Java 监测棒棒糖上的连通性

Java 监测棒棒糖上的连通性,java,android,android-livedata,Java,Android,Android Livedata,在与许多已弃用且不起作用的监控连接性解决方案进行斗争之后。这里是我的单文件实现,用于监控Android 21+以上的连接,并将工作到Android 10。 livedata返回连接状态的布尔值。因此,无论何时连接状态发生任何变化,您都可以轻松获得通知 希望它也能帮助别人 来源-> 公共类ConnectivityListener扩展了LiveData{ 私有连接管理器连接管理器; 公共连接链接器(应用程序上下文){ connectivityManager=(connectivityManager)

在与许多已弃用且不起作用的监控连接性解决方案进行斗争之后。这里是我的单文件实现,用于监控Android 21+以上的连接,并将工作到Android 10。 livedata返回连接状态的布尔值。因此,无论何时连接状态发生任何变化,您都可以轻松获得通知

希望它也能帮助别人

来源->

公共类ConnectivityListener扩展了LiveData{
私有连接管理器连接管理器;
公共连接链接器(应用程序上下文){
connectivityManager=(connectivityManager)
getSystemService(context.CONNECTIVITY\u服务);
}
private ConnectionManager.NetworkCallback回调=新建
ConnectivityManager.NetworkCallback(){
@凌驾
公共无效onAvailable(@NonNull Network){
超级用户可用(网络);
后置值(真);
}
@凌驾
public void onLost(@NonNull Network){
super.onLost(网络);
后置值(假);
}
@凌驾
公共无效不可导航(){
super.onUnavailable();
后置值(假);
}
};
@凌驾
受保护的void onActive(){
super.onActive();
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.Q){
NetworkCapabilities=connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
if(能力!=null){
布尔值isConnected=capabilities.hascability(NetworkCapabilities.NET\u CAPABILITY\u INTERNET);
后置值(未连接);
}
}否则{
NetworkInfo NetworkInfo=connectivityManager.getActiveNetworkInfo();
布尔值isConnected=networkInfo!=null&&networkInfo.isConnected();
后置值(未连接);
}
NetworkRequest.Builder=新建NetworkRequest.Builder();
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.N){
ConnectionManager.registerDefaultNetworkCallback(回调);
}否则{
ConnectionManager.registerNetworkCallback(builder.build(),callback);
}
}
@凌驾
受保护的void onInactive(){
super.onInactive();
ConnectionManager.unregisterNetworkCallback(回调);
}
}

您的要求是什么?@Quicklearner nothing只是试图帮助可能面临此问题的其他人。这应该在github上显示。实际上,它可以在StackOverflow上显示为一个带有公认答案的问题。您可以回答自己关于StackOverflow的问题。这是与社区分享知识的好方法。
public class ConnectivityListener extends LiveData<Boolean> {

    private ConnectivityManager connectivityManager;

    public ConnectivityListener(Application context) {

        connectivityManager = (ConnectivityManager) 
context.getSystemService(Context.CONNECTIVITY_SERVICE);
    }
    private ConnectivityManager.NetworkCallback callback = new 
ConnectivityManager.NetworkCallback() {
        @Override
        public void onAvailable(@NonNull Network network) {
            super.onAvailable(network);
            postValue(true);
        }

        @Override
        public void onLost(@NonNull Network network) {
            super.onLost(network);
            postValue(false);
        }

        @Override
        public void onUnavailable() {
            super.onUnavailable();
            postValue(false);
        }

    };

    @Override
    protected void onActive() {
        super.onActive();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            NetworkCapabilities capabilities =     connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
            if (capabilities != null) {
                boolean isConnected = capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
                postValue(isConnected);
            }
        } else {
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            boolean isConnected = networkInfo != null && networkInfo.isConnected();
            postValue(isConnected);
        }

        NetworkRequest.Builder builder = new NetworkRequest.Builder();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            connectivityManager.registerDefaultNetworkCallback(callback);
        } else {
            connectivityManager.registerNetworkCallback(builder.build(), callback);
        }
    }

    @Override
    protected void onInactive() {
        super.onInactive();
        connectivityManager.unregisterNetworkCallback(callback);
    }
}