首页 文章

在没有互联网的情况下连接到Wi-Fi时使用移动数据

提问于
浏览
1

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

在iOS设备上,将网络设置更改为静态并将路由器字段留空是可行的 . 但是在我的Android设备(运行Android 7.0的三星Galaxy Note 5)上,如果我将其留空,它将不会让我保存网络设置 .

我尝试使用第三方应用程序,如Mobiwol,Super Download和Speedify(只有Speedify似乎可以工作),但我希望能够在不需要这些应用的情况下完成此操作 .

我还尝试在开发人员设置中启用“保持移动数据打开”,以及“智能网络交换机”,它只是切换到我的蜂窝数据,因此我的应用程序无法正常工作,因为它在技术上并未连接到WiFi .

UPDATE: I managed to get cellular to work while connected through WiFi within my app (Thanks to Remy Lebeau and How to stay connected through mobile network after WIFI is connected on Android?). See code below.

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

NetworkRequest.Builder req = new NetworkRequest.Builder();
req.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); 
req.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); 

ConnectivityManager.NetworkCallback networkCallback = new 
ConnectivityManager.NetworkCallback() {

     @Override
     public void onAvailable(Network network) {
            connectivityManager.bindProcessToNetwork(network)                   
     }
};

connectivityManager.requestNetwork(req.build(), networkCallback);

1 回答

  • 0

    也许这个片段适合你,它会检查是否有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_NETWORK_STATE”

    并且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
        }
    }
    

相关问题