当 Internet 连接关闭时显示警报
Display an alert when Internet connection is off
我已将 android phone 连接到局域网。我想在禁用 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
,因为它已被弃用。提前致谢
更新:
我使用下面 link 中的示例解决了我的问题。
解释得很好。看看:)
试试这个
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();
}
}
首先,您展示的代码只会在创建 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 中注册它(如果您需要跨多个活动使用服务,更好的选择是使用它):
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" />
首先在你的manifest.xml文件中添加网络权限:
例如:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
然后创建并注册一个广播接收器class,只要network/internet连接发生变化,它就会收到通知。
这是一个很好的例子
link: https://www.androidhive.info/2012/07/android-detect-internet-connection-status/
我已将 android phone 连接到局域网。我想在禁用 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
,因为它已被弃用。提前致谢
更新:
我使用下面 link 中的示例解决了我的问题。 解释得很好。看看:)
试试这个
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();
}
}
首先,您展示的代码只会在创建 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 中注册它(如果您需要跨多个活动使用服务,更好的选择是使用它):
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" />
首先在你的manifest.xml文件中添加网络权限: 例如:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
然后创建并注册一个广播接收器class,只要network/internet连接发生变化,它就会收到通知。
这是一个很好的例子
link: https://www.androidhive.info/2012/07/android-detect-internet-connection-status/