Активация модема из кода Java: методы и примеры

Чтобы активировать модем из кода Java, вы можете использовать API Android Connectivity Manager. Вот пример того, как это сделать:

Метод 1: использование класса ConnectivityManager

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkRequest;
import android.net.wifi.WifiManager;
import android.os.Build;
public class TetheringManager {
    private Context context;
    private ConnectivityManager connectivityManager;
    private WifiManager wifiManager;
    public TetheringManager(Context context) {
        this.context = context;
        connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    }
    public void enableTethering() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NetworkRequest.Builder builder = new NetworkRequest.Builder();
            connectivityManager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback());
        } else {
            wifiManager.setWifiEnabled(false);
            connectivityManager.startTethering(ConnectivityManager.TETHERING_WIFI, false);
        }
    }
    public void disableTethering() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            connectivityManager.unregisterNetworkCallback(new ConnectivityManager.NetworkCallback());
        } else {
            connectivityManager.stopTethering(ConnectivityManager.TETHERING_WIFI);
            wifiManager.setWifiEnabled(true);
        }
    }
}

В приведенном выше коде метод enableTetheringактивирует привязку с помощью метода startTetheringкласса ConnectivityManager. Метод disableTetheringотключает привязку с помощью метода stopTethering.

Метод 2. Использование отражения (для старых версий Android)

import java.lang.reflect.Method;
public class TetheringManager {
    public static void enableTethering() {
        try {
            Class<?> tetherClass = Class.forName("android.net.ConnectivityManager");
            Method[] methods = tetherClass.getMethods();
            for (Method method : methods) {
                if (method.getName().equals("startTethering")) {
                    method.invoke(null, ConnectivityManager.TETHERING_WIFI, false);
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void disableTethering() {
        try {
            Class<?> tetherClass = Class.forName("android.net.ConnectivityManager");
            Method[] methods = tetherClass.getMethods();
            for (Method method : methods) {
                if (method.getName().equals("stopTethering")) {
                    method.invoke(null, ConnectivityManager.TETHERING_WIFI);
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

В этом методе мы используем отражение для доступа к методам startTetheringи stopTetheringкласса ConnectivityManager.