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

时间:2019-08-28 12:47:13

标签: java android deprecated

我已将我的Android手机与LAN连接。禁用局域网连接时,我想显示祝酒词或警报。我正在尝试以下代码,但没有用。我想念什么?

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

3 个答案:

答案 0 :(得分:2)

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

如上所述:

  

面向Android 7.0(API级别24)及更高版本的应用如果在清单中声明了广播接收器,则不会接收CONNECTIVITY_ACTION广播

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

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

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

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

为避免内存泄漏或多个绑定,建议在组件的生命周期结束后取消绑定接收器,您可以通过以下方式实现:

unregisterReceiver(permissionReceiver)

也不要忘记添加到您的清单:

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

答案 1 :(得分:1)

尝试一下

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(isNetworkConnected){

}else{
    Toast.makeText(context, "No Internet 
connection!",Toast.LENGTH_LONG).show();

}
}

public boolean isNetworkConnected(Context context) {
    ConnectivityManager cm = (ConnectivityManager) 
context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    return netInfo != null && netInfo.isConnected();
}
}

答案 2 :(得分:1)

首先在manifest.xml文件中添加了网络权限: 例如:

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

然后创建并注册一个广播接收器类,每当网络/互联网连接发生变化时,该类就会得到通知。

这是一个很好的例子 链接:https://www.androidhive.info/2012/07/android-detect-internet-connection-status/