Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在连接到Wi-Fi且无互联网的情况下使用手机数据_Java_Android_Sockets_Networking_Wifi - Fatal编程技术网

Java 在连接到Wi-Fi且无互联网的情况下使用手机数据

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似乎有效),但我希望能够做到这一

我正在创建一个Android应用程序,它通过WiFi连接到另一个设备,通过套接字连接发送和接收数据。我希望能够在保持与此设备连接的同时,使用手机数据做其他事情(如浏览)

在iOS设备上,将网络设置更改为静态并将“路由器”字段留空似乎是可行的。但在我的安卓设备(运行安卓7.0的三星Galaxy Note 5)上,如果我将其留空,它将不允许我保存网络设置

我曾尝试使用第三方应用程序,如Mobiwol、Super Download和Speedify(只有Speedify似乎有效),但我希望能够做到这一点,而不需要这些应用程序

我还尝试在开发者设置中打开“保持移动数据打开”,以及“智能网络交换机”,它只切换到我的手机数据,因此我的应用程序无法工作,因为它在技术上没有连接到WiFi

更新:在我的应用程序中通过WiFi连接时,我成功地让手机工作(感谢Remy Lebeau和)。请参阅下面的代码。

现在,我希望能够在后台应用程序中使用手机数据,如通知,或者如果我想打开浏览器等。有没有办法做到这一点


也许这段代码对你有用,它会检查是否有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
    }
}