Is there a way in Android API to list connected devices, when Android phone is acting as WiFi router?
And also is there a way to interefere with routed request to serve a welcome/login page?
Is there a way in Android API to list connected devices, when Android phone is acting as WiFi router?
And also is there a way to interefere with routed request to serve a welcome/login page?
 
    
    This is an answer from another stackoverflow question, I read it before two month and don´t know from which user the answer is from, but this should work. WifiManager gives You what You need:
Main.java
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import com.whitebyte.hotspotclients.R;
import com.whitebyte.wifihotspotutils.ClientScanResult;
import com.whitebyte.wifihotspotutils.WifiApManager;
public class Main extends Activity {
      TextView textView1;
      WifiApManager wifiApManager;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    textView1 = (TextView) findViewById(R.id.textView1);
    wifiApManager = new WifiApManager(this);
    scan();
}
private void scan() {
    ArrayList<ClientScanResult> clients = wifiApManager.getClientList(false);
    textView1.append("Clients: \n");
    for (ClientScanResult clientScanResult : clients) {
        textView1.append("####################\n");
        textView1.append("IpAddr: " + clientScanResult.getIpAddr() + "\n");
        textView1.append("Device: " + clientScanResult.getDevice() + "\n");
        textView1.append("HWAddr: " + clientScanResult.getHWAddr() + "\n");
        textView1.append("isReachable: " + clientScanResult.isReachable() + "\n");
    }
}
ClientScanResult.java
public class ClientScanResult {
private String IpAddr;
private String HWAddr;
private String Device;
private boolean isReachable;
public ClientScanResult(String ipAddr, String hWAddr, String device, boolean isReachable) {
    super();
    IpAddr = ipAddr;
    HWAddr = hWAddr;
    Device = device;
    this.setReachable(isReachable);
}
public String getIpAddr() {
    return IpAddr;
}
public void setIpAddr(String ipAddr) {
    IpAddr = ipAddr;
}
public String getHWAddr() {
    return HWAddr;
}
public void setHWAddr(String hWAddr) {
    HWAddr = hWAddr;
}
public String getDevice() {
    return Device;
}
public void setDevice(String device) {
    Device = device;
}
public void setReachable(boolean isReachable) {
    this.isReachable = isReachable;
}
public boolean isReachable() {
    return isReachable;
}
WIFI_AP_STATE.java
 public enum WIFI_AP_STATE 
 {
    WIFI_AP_STATE_DISABLING, WIFI_AP_STATE_DISABLED, WIFI_AP_STATE_ENABLING, WIFI_AP_STATE_ENABLED, WIFI_AP_STATE_FAILED
 }
WifiApManager.java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.InetAddress;
import java.util.ArrayList;
import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.util.Log;
public class WifiApManager {
private final WifiManager mWifiManager;
public WifiApManager(Context context) {
    mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
}
/**
 * Gets a list of the clients connected to the Hotspot, reachable timeout is 300
 * @param onlyReachables {@code false} if the list should contain unreachable (probably disconnected) clients, {@code true} otherwise
 * @return ArrayList of {@link ClientScanResult}
 */
public ArrayList<ClientScanResult> getClientList(boolean onlyReachables) {
    return getClientList(onlyReachables, 300);
}
/**
 * Gets a list of the clients connected to the Hotspot 
 * @param onlyReachables {@code false} if the list should contain unreachable (probably disconnected) clients, {@code true} otherwise
 * @param reachableTimeout Reachable Timout in miliseconds
 * @return ArrayList of {@link ClientScanResult}
 */
public ArrayList<ClientScanResult> getClientList(boolean onlyReachables, int reachableTimeout) {
    BufferedReader br = null;
    ArrayList<ClientScanResult> result = null;
    try {
        result = new ArrayList<ClientScanResult>();
        br = new BufferedReader(new FileReader("/proc/net/arp"));
        String line;
        while ((line = br.readLine()) != null) {
            String[] splitted = line.split(" +");
            if ((splitted != null) && (splitted.length >= 4)) {
                // Basic sanity check
                String mac = splitted[3];
                if (mac.matches("..:..:..:..:..:..")) {
                    boolean isReachable = InetAddress.getByName(splitted[0]).isReachable(reachableTimeout);
                    if (!onlyReachables || isReachable) {
                        result.add(new ClientScanResult(splitted[0], splitted[3], splitted[5], isReachable));
                    }
                }
            }
        }
    } catch (Exception e) {
        Log.e(this.getClass().toString(), e.getMessage());
    } finally {
        try {
            br.close();
        } catch (IOException e) {
            Log.e(this.getClass().toString(), e.getMessage());
        }
    }
    return result;
}
}
