<分区>
在我们的应用程序中,我们希望能够持续检查连接状态,如果它出现故障,则抛出一个 Toast 或某种 UI 以向用户表明它已断开。每当进行 API 调用时,我都尝试在我们的 Retrofit Api-Builder 类中执行此操作,但它似乎不喜欢那里的 Toasts(导致崩溃)。
iOS是有监控功能的,但是在Android上好像要手动查看。如果有多个 Activity 等,是否有一种简单/干净的方法可以在我们的应用程序中执行此操作?
<分区>
在我们的应用程序中,我们希望能够持续检查连接状态,如果它出现故障,则抛出一个 Toast 或某种 UI 以向用户表明它已断开。每当进行 API 调用时,我都尝试在我们的 Retrofit Api-Builder 类中执行此操作,但它似乎不喜欢那里的 Toasts(导致崩溃)。
iOS是有监控功能的,但是在Android上好像要手动查看。如果有多个 Activity 等,是否有一种简单/干净的方法可以在我们的应用程序中执行此操作?
最佳答案
这就是我监控互联网连接状态的方式。创建一个 Java 类并将其命名为 NetworkStateChangeReceiver
。
NetworkStateChangeReceiver
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;
import static android.content.Context.CONNECTIVITY_SERVICE;
public class NetworkStateChangeReceiver extends BroadcastReceiver {
public static final String NETWORK_AVAILABLE_ACTION = "yourapp.packagename.NetworkAvailable";
public static final String IS_NETWORK_AVAILABLE = "isNetworkAvailable";
@Override
public void onReceive(Context context, Intent intent) {
Intent networkStateIntent = new Intent(NETWORK_AVAILABLE_ACTION);
networkStateIntent.putExtra(IS_NETWORK_AVAILABLE, isConnectedToInternet(context));
LocalBroadcastManager.getInstance(context).sendBroadcast(networkStateIntent);
}
private boolean isConnectedToInternet(Context context) {
try {
if (context != null) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnected();
}
return false;
} catch (Exception e) {
Log.e(NetworkStateChangeReceiver.class.getName(), e.getMessage());
return false;
}
}
}
在您的 MainActivity 中,添加以下行。
IntentFilter intentFilter = new
IntentFilter(NetworkStateChangeReceiver.NETWORK_AVAILABLE_ACTION);
LocalBroadcastManager.getInstance(this).registerReceiver(new
BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
boolean isNetworkAvailable = intent.getBooleanExtra(IS_NETWORK_AVAILABLE, false);
String networkStatus = isNetworkAvailable ? "Connected!" : "Disconnected!";
final SweetAlertDialog CC = new SweetAlertDialog(MainActivity.this, SweetAlertDialog.WARNING_TYPE);
CC.setTitleText("Network Status");
CC.setContentText(networkStatus);
CC.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
CC.setCancelable(false);
CC.show();
您可以使用简单的警报对话框或 toast 来显示消息。我用过 SweetAlertDialog Library更简洁的用户界面。
关于Android - 监控互联网连接状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45603538/
相关文章:
java - URI.parse 和 imagebutton 错误
java - 如何在Retrofit2/rxJava中刷新ACCESS-TOKEN
android - android `isConnected()`中 `isAvailable()`和 `NetworkInfo`的区别
Android:将蓝牙经典扫描与低功耗扫描分开,或区分经典设备与低功耗设备
android - 为什么 ping 在某些设备上有效而在其他设备上无效?
android - WearOS - 有没有办法从 ECG 传感器收集原始数据?
android - 与 AsyncTask 线程通信?处理程序不工作?
google-compute-engine - 无法连接到在 Google Compute Engine 虚拟机实例上运行的 HTTP 服务