Как сделать Mobile Data сетью по умолчанию, когда Wifi также включен - PullRequest
0 голосов
/ 09 ноября 2018

Я использую приложение HIPRIKeeper для одновременного подключения данных Wifi и Mobile.

HIPRIKeeper: https://github.com/MPTCP-smartphone-thesis/MultipathControl/tree/master/HIPRIKeeper

Но я хочу использовать Мобильные данные для отправки запросов вместо Wi-Fi. Для этого я должен сделать мобильные данные в качестве сети по умолчанию.

Код для одновременного подключения Mobile Data и Wifi

    private boolean isWifiConnected() 
{
            ConnectivityManager connManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo mWifi = connManager
                    .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            return mWifi.isConnectedOrConnecting();
}

        /* Check whether Mobile Data has been disabled in the System Preferences */
        private boolean isMobileDataEnabled() 
{
            boolean mobileDataEnabled = false;
            ConnectivityManager cm = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            try {
                Class<?> cmClass = Class.forName(cm.getClass().getName());
                Method method = cmClass.getDeclaredMethod("getMobileDataEnabled");
                method.setAccessible(true);
                mobileDataEnabled = (Boolean) method.invoke(cm);
            } catch (Exception e) {
            }
            return mobileDataEnabled;
}

        /* Enable having WiFi and 3G/LTE enabled at the same time */
        public void setMobileDataActive(boolean mEnabled) 
{
            if (Manager.DEBUG)
                Log.d(Manager.TAG, "setMobileDataActive " + new Date());

            final ConnectivityManager cManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            if (isMobileDataEnabled() && isWifiConnected()) 
           {
                cManager.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
                        "enableHIPRI");

                Toast.makeText(context, "Binded to Mobile Data",Toast.LENGTH_LONG).show();      
            }
            else 
            {
                cManager.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
                        "enableHIPRI");
                Toast.makeText(context, "Cannot bind to Mobile data", Toast.LENGTH_LONG).show();
            }
}

Хотя методы startUsingNetworkFeature () и stopUsingNetworkFeature () устарели, но у меня есть старое тестовое устройство с API 18, поэтому оно работает над ним. Проблема в том, что при включении обоих соединений все данные передаются через Wifi.

...