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