Я пытаюсь проверить подключение к Интернету с помощью NetworkCallBack. Однако мой код возвращает странные результаты. Пожалуйста помогите. Любая помощь будет оценена.
CheckNetwork.java
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkRequest;
import android.os.Build;
import android.util.Log;
import androidx.annotation.RequiresApi;
public class CheckNetwork {
private Context context;
public CheckNetwork(Context context) {
this.context = context;
}
@RequiresApi(api = Build.VERSION_CODES.N)
public void registerNetworkCallback()
{
try {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder builder = new NetworkRequest.Builder();
connectivityManager.registerDefaultNetworkCallback( new ConnectivityManager.NetworkCallback(){
@Override
public void onAvailable(Network network) {
Log.d("available", "internet");
Variables.isNetworkConnected = true;
Log.d("Net_Var_In", String.valueOf(Variables.isNetworkConnected));
}
@Override
public void onLost(Network network) {
Log.d("not_av", "internet");
Variables.isNetworkConnected = false;
}
}
);
}catch (Exception e){
e.printStackTrace();
Variables.isNetworkConnected = false;
}
Log.d("Net_Var_End", String.valueOf(Variables.isNetworkConnected));
}
}
MainActivity.java
CheckNetwork checkNetwork = new CheckNetwork(getApplicationContext());
checkNetwork.registerNetworkCallback();
Log.d("Net_Var_Main", String.valueOf(Variables.isNetworkConnected));
if(Variables.isNetworkConnected)
{
Log.d("Internet", "available");
}
else
{
setContentView(R.layout.activity_internet);
return false;
}
Логкат:
Когда Интернет подключен/доступен: (даже несмотря на то, что он печатает, что Интернет доступен, он все равно переходит к layout_internet.., который является макетом, когда Интернет НЕ доступен)
2020-07-17 14:07:09.735 3671-3671/com.example.scrollingtext D/Net_Var_End: false
2020-07-17 14:07:09.735 3671-3671/com.example.scrollingtext D/Net_Var_Main: false
2020-07-17 14:07:09.794 3671-3671/com.example.scrollingtext W/e.scrollingtex: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection)
2020-07-17 14:07:09.795 3671-3671/com.example.scrollingtext W/e.scrollingtex: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
2020-07-17 14:07:09.816 3671-3702/com.example.scrollingtext D/available: internet
2020-07-17 14:07:09.816 3671-3702/com.example.scrollingtext D/Net_Var_In: true
Когда Интернет не подключен/не доступен: (даже несмотря на то, что он печатает, что Интернет доступен, он все равно переходит к layout_internet.., который является макетом, когда Интернет НЕ доступен)
2020-07-17 14:09:31.611 3744-3744/com.example.scrollingtext D/Net_Var_End: false
2020-07-17 14:09:31.611 3744-3744/com.example.scrollingtext D/Net_Var_Main: false
2020-07-17 14:09:31.663 3744-3744/com.example.scrollingtext W/e.scrollingtex: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection)
2020-07-17 14:09:31.663 3744-3744/com.example.scrollingtext W/e.scrollingtex: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
2020-07-17 14:09:31.678 3744-3776/com.example.scrollingtext D/available: internet
2020-07-17 14:09:31.678 3744-3776/com.example.scrollingtext D/Net_Var_In: true
ИЗМЕНИТЬ
На основе CheckNetwork.java, который отслеживает состояние сети с помощью NetworkCallBack... как бы вы изменили макет перед экраном пользователя, когда запускаются OnAvailable() и OnLost()? Я хотел бы открыть layout_internet при запуске OnLost()... а затем layout_activity_main при запуске OnAvailable. Это должно происходить изнутри CheckNetwork. Итак, похоже, я ищу доступ к setContentView (который доступен только в MainActivity) из OnAvailable или OnLost. Или есть другой способ открыть layout_internet и layout_activity_main, когда интернет доступен/потерян?
super.onAvailable(network);
- person V.C.   schedule 17.07.2020val builder = NetworkRequest.Builder() builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) //or NET_CAPABILITY_INTERNET or TRANSPORT_WIFI
- person V.C.   schedule 17.07.2020