java - 当互联网连接关闭时显示警报

标签 java android deprecated

我已将我的 Android 手机连接到 LAN 连接。我想在禁用 LAN 连接时显示 toast 或警报。我正在尝试以下代码,但它没有用。我缺少什么?

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    isNetworkAvailable(MainActivity.this);
}

// to check connection state

public static boolean isNetworkAvailable(Context context){
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    Network network = connectivityManager.getActiveNetwork();
    NetworkCapabilities networkCapabilities = connectivityManager.getNetworkCapabilities(network);
    if(networkCapabilities == null){
        Toast.makeText(context, "No Internet connection!", Toast.LENGTH_LONG).show();
    }
    return true;
}
}

我无法使用 NetworkInfo,因为它已被弃用。提前致谢

更新:

我使用下面链接中的示例解决了我的问题。 解释得很好。看看:)

Detect internet Connection

最佳答案

首先,您显示的代码仅在创建 Activity 时才会触发,并且仅触发一次。您需要的是Monitor for changes in connectivity

如上所述:

Apps targeting Android 7.0 (API level 24) and higher do not receive CONNECTIVITY_ACTION broadcasts if they declare the broadcast receiver in their manifest

这意味着您必须创建一个自定义广播接收器(我使用 kotlin 进行 Android 开发,您应该能够将其转换为 java):

class NetworkStatusReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        // check intent action for the connection status
    }
}

要使用接收器,您需要在您的 Activity 中注册它(如果您在多个 Activity 中需要它,更好的选择是使用服务):

val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
filter.addAction("mypackage.CONNECTIVITY_CHANGE")
val permissionReceiver = NetworkStatusReceiver()
registerReceiver(permissionReceiver, filter)

为了避免内存泄漏或多重绑定(bind),建议在组件生命周期结束后取消绑定(bind)接收器,您可以通过以下方式执行此操作:

unregisterReceiver(permissionReceiver)

另外,不要忘记添加到您的 list 中:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

关于java - 当互联网连接关闭时显示警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57692805/

相关文章:

android - Imageview Interactive-water-effect android

android - 如何在 Canvas 上的两点之间绘制弧线?

ruby-on-rails - 我仍然不赞成rake/rdoctask

ios - 如果 Xcode 中有替代方法,则抑制警告是否正确

java - RecyclerView 与 Firebase 搜索在搜索时显示所有产品

java - 多个数据存储操作——我们需要多少个持久化管理器引用?

java - 来自/usr/share/java 的 JAR 依赖解析

java - 基本 Activity 抽象类方法不在其他 Activity 中执行

android - 如何在 Android 上保存和比较 2 个指纹

ruby - iconv 将来会被弃用,音译