Java 在连接到Wi-Fi且无互联网的情况下使用手机数据
我正在创建一个Android应用程序,它通过WiFi连接到另一个设备,通过套接字连接发送和接收数据。我希望能够在保持与此设备连接的同时,使用手机数据做其他事情(如浏览) 在iOS设备上,将网络设置更改为静态并将“路由器”字段留空似乎是可行的。但在我的安卓设备(运行安卓7.0的三星Galaxy Note 5)上,如果我将其留空,它将不允许我保存网络设置 我曾尝试使用第三方应用程序,如Mobiwol、Super Download和Speedify(只有Speedify似乎有效),但我希望能够做到这一点,而不需要这些应用程序 我还尝试在开发者设置中打开“保持移动数据打开”,以及“智能网络交换机”,它只切换到我的手机数据,因此我的应用程序无法工作,因为它在技术上没有连接到WiFi 更新:在我的应用程序中通过WiFi连接时,我成功地让手机工作(感谢Remy Lebeau和)。请参阅下面的代码。 现在,我希望能够在后台应用程序中使用手机数据,如通知,或者如果我想打开浏览器等。有没有办法做到这一点Java 在连接到Wi-Fi且无互联网的情况下使用手机数据,java,android,sockets,networking,wifi,Java,Android,Sockets,Networking,Wifi,我正在创建一个Android应用程序,它通过WiFi连接到另一个设备,通过套接字连接发送和接收数据。我希望能够在保持与此设备连接的同时,使用手机数据做其他事情(如浏览) 在iOS设备上,将网络设置更改为静态并将“路由器”字段留空似乎是可行的。但在我的安卓设备(运行安卓7.0的三星Galaxy Note 5)上,如果我将其留空,它将不允许我保存网络设置 我曾尝试使用第三方应用程序,如Mobiwol、Super Download和Speedify(只有Speedify似乎有效),但我希望能够做到这一
也许这段代码对你有用,它会检查是否有wifi连接来完成这项工作,或者它会通过移动连接来完成
ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobile = connManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (wifi.isConnected()){
// If Wi-Fi connected
}
if (mobile.isConnected()) {
// If Internet connected
}
请确保将其添加到您的清单中:
“android.permission.ACCESS\u网络\u状态”
thsi是一种检查wifi连接的方法,当返回false时,您可以将移动数据添加为else状态
private boolean checkWifiOnAndConnected() {
WifiManager wifiMgr = (WifiManager) getSystemService(Context.WIFI_SERVICE);
if (wifiMgr.isWifiEnabled()) { // Wi-Fi adapter is ON
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
if( wifiInfo.getNetworkId() == -1 ){
return false; // Not connected to an access point
}
return true; // Connected to an access point
}
else {
return false; // Wi-Fi adapter is OFF
}
}
我没有点击负一:如果连接了WiFi,新的连接通常会使用WiFi而不是手机。如果要在WiFi处于活动状态时强制连接使用手机网络,请使用
ConnectivityManager
获取手机网络,然后使用Network.getSocketFactory().createSocket()
,Network.bindSocket()
或Network.openConnection()
创建连接。如果要强制特定连接改用WiFi,请执行相同操作。因此,您可以使用ConnectivityManager.bindProcessToNetwork()
使您的应用程序默认使用蜂窝网络,然后使用WiFi网络
进行设备连接。@RemyLebeau您能提供适当的源代码吗?
private boolean checkWifiOnAndConnected() {
WifiManager wifiMgr = (WifiManager) getSystemService(Context.WIFI_SERVICE);
if (wifiMgr.isWifiEnabled()) { // Wi-Fi adapter is ON
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
if( wifiInfo.getNetworkId() == -1 ){
return false; // Not connected to an access point
}
return true; // Connected to an access point
}
else {
return false; // Wi-Fi adapter is OFF
}
}