Let me quickly describe my setup and goal. I have a android tablet display running Android version 7.1.2
I have a motor controller that is hooked up to the Android tablet via ethernet. In my Android app that controls the motor controller, I use Wifi to communicate with some servers that provide/store data. Currently, I can use an Android simulator (in Android Studio) that allows me to communicate with the motor controller while also using the wifi for calls to the server. When I run the app on the Android tablet itself, I can only have Wifi OR Ethernet active at one time.
According to this post this is a hard limitation in Android itself. It also details some possible fixes, but its quite old and to be honest I do not have any experience in the required steps described by their vague instructions.
Can anyone provide a more up-to-date solution to this problem, preferably one that is a little more detailed for newbies like me? Even just a pointer to learning how to do the necessary steps for fixing this would be great, I've been stuck on this for awhile! Thanks for any help!
EDIT: Here's some relevant info in regards to AlwaysLearning's answer...
The class I use to manage reading from Modbus
public class ModbusRead {
    private static final String TAG = "MODBUS READ";
    ModbusClient mClientReadAll;
    public ModbusRead()
    {
//        IP = "192.168.124.2";
//        port = 502;
        mClientReadAll = new ModbusClient(Modbus.IP, Integer.valueOf(Modbus.port));
        mClientReadAll.setUnitIdentifier((byte)255);
    }
    public Runnable readAll()
    {
        return () -> {
                ReadAllFromModbus mReadAll = new ReadAllFromModbus();
                mReadAll.execute();
        };
    }
    public class ReadAllFromModbus extends AsyncTask<String, Void, String> {
        private final String TAG = "READ ALL FROM MODBUS";
        @Override
        protected String doInBackground(String... params) {
            try
            {
                mClientReadAll.Connect();
                // get all registers
                int[] registerBlock = mClientReadAll.ReadHoldingRegisters(Constants.RegisterRead.HR_MODE.getRegister()- 1, 16);
                int[] wideRegisters = new int[] {
                        Modbus.convertWideRegister(mClientReadAll.ReadHoldingRegisters(Constants.RegisterRead.HR_ACTUAL_POSITION.getRegister() - 1, 2)),
                        Modbus.convertWideRegister(mClientReadAll.ReadHoldingRegisters(Constants.RegisterRead.HR_TARGET_POSITION.getRegister() - 1, 2)),
                        Modbus.convertWideRegister(mClientReadAll.ReadHoldingRegisters(Constants.RegisterRead.HR_ROM_DELTA.getRegister() - 1, 2)),
                        Modbus.convertWideRegister(mClientReadAll.ReadHoldingRegisters(Constants.RegisterRead.HR_REWIND_ZERO.getRegister() - 1, 2))
                };
                int[] tensionRegister = mClientReadAll.ReadHoldingRegisters(Constants.RegisterRead.HR_ACTUAL_TENSION.getRegister() - 1, 1);
                Modbus.updateAllRegisters(registerBlock, wideRegisters, tensionRegister);
            }
            catch (Exception e)
            {
                Log.i(TAG, "ERROR IN GETTING ALL REGISTERS LOOP: " + e.getMessage());
                e.printStackTrace();
            }
            return null;
        }
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            try
            {
                mClientReadAll.Disconnect();
            }
            catch(Exception e)
            {
                Log.i(TAG, "ERROR IN DISCONNECTING");
            }
        }
    }
}The relevant part of my Dashboard class that would handle starting the thread that does all the modbus reading
How would I go about forcing the ModbusRead class to use the Ethernet here?
    ModbusRead modbusRead = new ModbusRead();
    final ConnectivityManager connectivityManager = (ConnectivityManager) this.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
    final NetworkRequest requestEthernet = new NetworkRequest.Builder()
            .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
            .build();
    final ConnectivityManager.NetworkCallback cbEthernet = new ConnectivityManager.NetworkCallback() {
        @Override
        public void onAvailable(Network network) {
            // connectivityManager.bindProcessToNetwork(network);
            try
            {
                // Modbus.IP = "192.168.124.2"
                // Modbus.port = 502
                Log.i(TAG, "TRYING TO BIND SOCKET...");
                InetAddress address = InetAddress.getByName(Modbus.IP);
                Log.i(TAG, "ADDRESS: " + address.toString());
                Socket socket = new Socket(address, Modbus.port);
                Log.i(TAG, "SOCKET CREATED..." + socket.getInetAddress());
                network.bindSocket(socket);
                Log.i(TAG, "BOUND ETHERNET");
            }
            catch (Exception e)
            {
                e.printStackTrace();
                Log.i(TAG, "EXCEPTION: " + e.getMessage());
            }
        }
    };
    connectivityManager.requestNetwork(requestEthernet, cbEthernet);
    ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
    executorService.scheduleAtFixedRate(modbusRead.readAll(), 2000, 250, TimeUnit.MILLISECONDS);
