美好的一天。 我知道如何检查是否有可用的互联网连接,我的问题是我想向用户呈现一个 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/