Как принудительно использовать мобильные данные для любого приложения, когда Wi-Fi включен в Android 6

Я хочу, чтобы приложение для Android использовало только мобильные данные, даже если Wi-Fi и мобильные данные включены в Android 6. Как я могу привязать процесс Android только к мобильным данным.
Пожалуйста, предложите. Примеры будут хорошими.


person Pallav Singh    schedule 24.10.2016    source источник


Ответы (2)


Вы можете сделать это довольно легко, если у вас версия Android M или выше. Во-первых, вам нужны правильные разрешения манифеста: ‹uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /› ‹uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /›

Вот пример метода, который должен делать то, что вам нужно:

public static void forceConnectionToMobile2(Context context) {
    final ConnectivityManager connection_manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        NetworkRequest.Builder request = new NetworkRequest.Builder();

        Log.d(TAG,"request TRANSPORT_CELLULAR");
        request.addCapability(NetworkCapabilities.TRANSPORT_CELLULAR);

        connection_manager.requestNetwork(request.build(), new ConnectivityManager.NetworkCallback() {
            @Override
            public void onAvailable(Network network) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    Log.d(TAG,"binding app to cellular network");
                    connection_manager.bindProcessToNetwork(network);
                }
            }
        });

    }
}
person davidmc.w3sys    schedule 24.10.2016
comment
Я пробовал это с Wi-Fi без интернета и включением сотовых данных, но тогда я не могу использовать Интернет... - person Sahil Shokeen; 10.07.2020

Вы можете посетить Приложение Android для использования мобильного канала передачи данных

    manager = (WifiManager)this.getSystemService(Context.WIFI_SERVICE);

if(manager.isWifiEnabled()) {
    manager.setWifiEnabled(false);
}
// and to be sure:
ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);
person VinayaK    schedule 24.10.2016
comment
Я не хочу отключать WIFI на уровне устройства. просто хочу использовать только мобильные данные для своего приложения. - person Pallav Singh; 24.10.2016
comment
логическое значение mobileDataEnabled = false; попробуйте { Class cmClass = Class.forName(connection_manager.getClass().getName()); Метод метода = cmClass.getDeclaredMethod(getMobileDataEnabled); метод.setAccessible(истина); mobileDataEnabled = (логическое значение) method.invoke(connection_manager); } поймать (Исключение e) { } - person Ashish Garg; 29.09.2017