java - 检查运行时互联网连接是否丢失

标签 java android

美好的一天。 我知道如何检查是否有可用的互联网连接,我的问题是我想向用户呈现一个 AlertDialog,它可以阻止操作,除非在连接丢失或停用时再次尝试。我不知道的是如何只编写一次代码,因此我不需要在所有 Activity 中手动复制它。

我尝试使用观察者模式,并在SplashActivity(Launcher Activity)中初始化它。


 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        ObservedObject observedObject = new ObservedObject();
        observedObject.addObserver(new ObserverInternetConnection());

}
 public class ObservedObject extends Observable {
        private boolean isConnected;

        public boolean isConnected() {
            return isConnected;
        }

        public void setConnected(boolean connected) {
            isConnected = connected;
            setChanged();
            notifyObservers();
        }

     public class ObserverInternetConnection implements Observer {

        @Override
        public void update(Observable observable, Object o) {
            if (observable instanceof ObservedObject) {
                if (observable.hasChanged())
//alert is a method to show toast message
                    alert("connection changed");
                if (((ObservedObject) observable).isConnected)
                    alert("connected");
                else
                    alert("disconnected");

            }

        }
    }

当我手动设置observedObject连接时它起作用了。但我想避免这样做。有没有办法自动执行此操作?我正在考虑使用另一个线程,但我该怎么做呢? 另一个问题是,我检查互联网连接的方式是使用 ConnectivityManager,但它需要我传递上下文,并且上下文可以(并且将会)在整个应用程序中发生变化,我该如何克服这个问题?还有其他方法可以解决这个问题吗?

最佳答案

我建议创建BaseActivity,在其中初始化连接更改监听器(在您的情况下为观察者),并使用 Splash、Main 和您正在使用的其他 Activity 扩展此 Activity 。

这样您就可以避免代码重复。

另外,不要忘记在 Activity 被销毁时取消注册监听器。

您也不需要使用不同的线程。以下是如何监听 Activity 中的连接变化的示例:

首先注册接收者:

   @Override
    public void register(Context context) {
        initReceiver();
        final IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        context.registerReceiver(receiver, intentFilter);
    }

接收者

receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (isOnline()) {
                    hideNoConnectionError();
                } else {
                    showNoConnectionError();
                }
            }
        };

和 isOnline()

 val isOnline: Boolean
        get() {
            return try {
                val connectivityManager = context.getSystemService(
                        Context.CONNECTIVITY_SERVICE) as ConnectivityManager
                connectivityManager.activeNetworkInfo != null &&
                        connectivityManager.activeNetworkInfo.isConnected
            } catch (exception: Exception) {
                false
            }
        }

抱歉,最后一个方法是用Kotlin编写的,但我认为这是完全可以理解的

关于java - 检查运行时互联网连接是否丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57771926/

相关文章:

java - 它是什么意思(NetBeans,编译警告)?

java - 切换语句引号

Java - 使屏幕进入休眠状态(或屏幕保护程序)

java - Android 多屏幕多选项菜单,无代码重复

android - 在 Cocos2d-x 项目中包含新的 Firebase 库

Java 应用程序与命令行交互

java - 执行 bash 脚本并从 java 传递带空格的参数

android - 如何通过Python启动Android应用程序

android - 是否可以使用 Ktor 和/或 Kotlin 多平台来 "share"Rest API 和 Android 应用程序之间公开的数据?

android - Facebook 个人资料图片 Android 返回 null