Android Open Source - Android-Wifi-Hotspot-Manager-Class Wifi Ap Manager






From Project

Back to project page Android-Wifi-Hotspot-Manager-Class.

License

The source code is released under:

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCT...

If you think the Android project Android-Wifi-Hotspot-Manager-Class listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2013 WhiteByte (Nick Russler, Ahmet Yueksektepe).
 */*from w w w.j  a v  a 2  s  .  c o  m*/
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.whitebyte.wifihotspotutils;

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.os.Handler;
import android.util.Log;

public class WifiApManager {
  private final WifiManager mWifiManager;
  private Context context;

  public WifiApManager(Context context) {
    this.context = context;
    mWifiManager = (WifiManager) this.context.getSystemService(Context.WIFI_SERVICE);
  }

  /**
   * Start AccessPoint mode with the specified
   * configuration. If the radio is already running in
   * AP mode, update the new configuration
   * Note that starting in access point mode disables station
   * mode operation
   * @param wifiConfig SSID, security and channel details as part of WifiConfiguration
   * @return {@code true} if the operation succeeds, {@code false} otherwise
   */
  public boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) {
    try {
      if (enabled) { // disable WiFi in any case
        mWifiManager.setWifiEnabled(false);
      }

      Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
      return (Boolean) method.invoke(mWifiManager, wifiConfig, enabled);
    } catch (Exception e) {
      Log.e(this.getClass().toString(), "", e);
      return false;
    }
  }

  /**
   * Gets the Wi-Fi enabled state.
   * @return {@link WIFI_AP_STATE}
   * @see #isWifiApEnabled()
   */
  public WIFI_AP_STATE getWifiApState() {
    try {
      Method method = mWifiManager.getClass().getMethod("getWifiApState");

      int tmp = ((Integer)method.invoke(mWifiManager));

      // Fix for Android 4
      if (tmp >= 10) {
        tmp = tmp - 10;
      }

      return WIFI_AP_STATE.class.getEnumConstants()[tmp];
    } catch (Exception e) {
      Log.e(this.getClass().toString(), "", e);
      return WIFI_AP_STATE.WIFI_AP_STATE_FAILED;
    }
  }

  /**
   * Return whether Wi-Fi AP is enabled or disabled.
   * @return {@code true} if Wi-Fi AP is enabled
   * @see #getWifiApState()
   *
   * @hide Dont open yet
   */
  public boolean isWifiApEnabled() {
    return getWifiApState() == WIFI_AP_STATE.WIFI_AP_STATE_ENABLED;
  }

  /**
   * Gets the Wi-Fi AP Configuration.
   * @return AP details in {@link WifiConfiguration}
   */
  public WifiConfiguration getWifiApConfiguration() {
    try {
      Method method = mWifiManager.getClass().getMethod("getWifiApConfiguration");
      return (WifiConfiguration) method.invoke(mWifiManager);
    } catch (Exception e) {
      Log.e(this.getClass().toString(), "", e);
      return null;
    }
  }

  /**
   * Sets the Wi-Fi AP Configuration.
   * @return {@code true} if the operation succeeded, {@code false} otherwise
   */
  public boolean setWifiApConfiguration(WifiConfiguration wifiConfig) {
    try {
      Method method = mWifiManager.getClass().getMethod("setWifiApConfiguration", WifiConfiguration.class);
      return (Boolean) method.invoke(mWifiManager, wifiConfig);
    } catch (Exception e) {
      Log.e(this.getClass().toString(), "", e);
      return false;
    }
  }

  /**
   * 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
   * @param finishListener, Interface called when the scan method finishes
   */
  public void getClientList(boolean onlyReachables, FinishScanListener finishListner) {
    getClientList(onlyReachables, 300, finishListner );
  }

  /**
   * 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
   * @param finishListener, Interface called when the scan method finishes 
   */
  public void getClientList(final boolean onlyReachables, final int reachableTimeout, final FinishScanListener finishListener) {


    Runnable runnable = new Runnable() {
      public void run() {

        BufferedReader br = null;
        final ArrayList<ClientScanResult> result = new ArrayList<ClientScanResult>();
        
        try {
          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.toString());
        } finally {
          try {
            br.close();
          } catch (IOException e) {
            Log.e(this.getClass().toString(), e.getMessage());
          }
        }

        // Get a handler that can be used to post to the main thread
        Handler mainHandler = new Handler(context.getMainLooper());
        Runnable myRunnable = new Runnable() {
          @Override
          public void run() {
            finishListener.onFinishScan(result);
          }
        };
        mainHandler.post(myRunnable);
      }
    };

    Thread mythread = new Thread(runnable);
    mythread.start();
  }
}




Java Source Code List

com.whitebyte.hotspotcontrolexample.Main.java
com.whitebyte.wifihotspotutils.ClientScanResult.java
com.whitebyte.wifihotspotutils.FinishScanListener.java
com.whitebyte.wifihotspotutils.WIFI_AP_STATE.java
com.whitebyte.wifihotspotutils.WifiApManager.java