ConnectivityManager connectivity_mgr = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
NetworkInfo net_info = connectivity_mgr.getActiveNetworkInfo();
if (net_info != null && net_info.isConnectedOrConnecting() && !conn_name.equalsIgnoreCase("")) {
new_con = net_info.getExtraInfo();
if (new_con != null && !new_con.equalsIgnoreCase(conn_name))
network_changed = true;
conn_name = (new_con == null) ? "" : new_con;
connectionStatus ="connected";
} else {
if (net_info != null && conn_name.equalsIgnoreCase("")) {
conn_name = net_info.getExtraInfo();
connectionStatus ="connected";
network_changed = true;
} else if(!new_con.equals(conn_name)) {
conn_name = "";
connectionStatus ="disconnected";
network_changed = true;
}
}
所以问题是当用户关闭WiFi按钮时,移动数据仍然连接,但我仍然收到WiFi关闭的通知。它指示我网络断开,即使我的手机仍然连接到移动数据。
但一秒钟后,我收到移动数据连接的通知。但是一旦我收到网络断开,我已经关闭了我的VoIP呼叫。因此,当我收到WiFi关闭的通知时,我如何确定移动数据是否仍然连接。
我尝试了getActiveNetworkInfo(),但当我收到WiFi关闭的通知时,它碰巧为null。
您可以利用ConnectivityManager
API:特别是在您的用例中,您对RegisterDefaultNetworkCallback()
:
public class TestActivity extends AppCompatActivity {
private ConnectivityManager manager;
private final ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
super.onAvailable(network);
// this ternary operation is not quite true, because non-metered doesn't yet mean, that it's wifi
// nevertheless, for simplicity let's assume that's true
Log.i("vvv", "connected to " + (manager.isActiveNetworkMetered() ? "LTE" : "WIFI"));
}
@Override
public void onLost(Network network) {
super.onLost(network);
Log.i("vvv", "losing active connection");
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
manager.registerDefaultNetworkCallback(networkCallback);
}
@Override
protected void onDestroy() {
super.onDestroy();
manager.unregisterNetworkCallback(networkCallback);
}
}
我的设备在大约半秒内连接到LTE。
这意味着,你无法事先知道,当WIFI断开时,设备最终是否会连接到LTE。因此,您可以采用以下方法:在处理程序上发布一个操作,在该操作中取消调用。如果连接出现任何时间很快-取消计划以前发布的行动。如果您最终处于runnable
代码中,那么连接没有快速建立,这意味着您应该结束调用。
public class TestActivity extends AppCompatActivity {
private ConnectivityManager manager;
private final Handler handler = new Handler();
private final ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
super.onAvailable(network);
Log.i("vvv", "connected to " + (manager.isActiveNetworkMetered() ? "LTE" : "WIFI"));
// we've got a connection, remove callbacks (if we have posted any)
handler.removeCallbacks(endCall);
}
@Override
public void onLost(Network network) {
super.onLost(network);
Log.i("vvv", "losing active connection");
// Schedule an event to take place in a second
handler.postDelayed(endCall, 1000);
}
};
private final Runnable endCall = new Runnable() {
@Override
public void run() {
// if execution has reached here - feel free to cancel the call
// because no connection was established in a second
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
manager.registerDefaultNetworkCallback(networkCallback);
}
@Override
protected void onDestroy() {
super.onDestroy();
manager.unregisterNetworkCallback(networkCallback);
handler.removeCallbacks(endCall);
}
}
我需要解决这个问题。请帮我指导一下。
本文向大家介绍WiFi和以太网之间的区别,包括了WiFi和以太网之间的区别的使用技巧和注意事项,需要的朋友参考一下 无线上网 WiFi,无线保真是一个小型网络,智能手机,计算机或其他可联网设备在小范围内无线连接并使用热点共享Internet。WiFi使用射频波进行无线高速互联网和网络连接。WiFi天线的尺寸非常小,可以放在小型路由器上。Wifi可用于连接打印机,计算机,游戏机,移动设备等。 以太网
全部的 我是骆驼的开胃菜。我有一些问题。这里有一个场景。 文件正文中有2个字段。(seq, date, OR no.)所以,我为这个数据格式生成了pojo类。 我申请了骆驼队。几天后,关于添加名称字段,dataformat发生了更改。 所以,我们需要修改pojo类并再次重建应用程序。但我们不想再次构建应用程序并为dataformat生成pojo类。 如果我们可以在运行时使用xsd动态生成Pojo类
THX!
我目前正在研究Flyway作为Liquibase的替代方案,但在文档中无法找到以下问题的答案: 假设在生产环境中部署后发现迁移包含错误。回想起来,不应该按原样执行,但已经太晚了。但是,我们想用固定版本的替换迁移,这样从头开始填充的数据库就不会遭受相同的错误。 在 Liquibase 中,您将修复原始变更集并使用
我使用文档中的一次单击digital ocean部署来创建一个Hasura实例。然后我配置了Hasura,创建了表,添加了行等等,并为我的应用程序建立了数据模型。 我现在需要将所有这些数据移动到一个单独的数字海洋卷,这样我就可以随着数据库的增长而增加存储空间。我在同一个小滴上创建了一个新的Hasura实例,从新卷的内部,我可以在不同的端口上访问它。如何将所有数据和配置从一个Hasura实例传输到另