博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Wifi Hotspot Manager Class
阅读量:7157 次
发布时间:2019-06-29

本文共 13825 字,大约阅读时间需要 46 分钟。

http://www.whitebyte.info/android/android-wifi-hotspot-manager-class

 

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.util.Log; public class WifiApManager {    private final WifiManager mWifiManager;     public WifiApManager(Context context) {        mWifiManager = (WifiManager) 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 * @return ArrayList of {
@link ClientScanResult} */ public ArrayList
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
getClientList(boolean onlyReachables, int reachableTimeout) { BufferedReader br = null; ArrayList
result = null; try { result = new ArrayList
(); 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; }}

http://xiaxingwork.iteye.com/blog/1727722

以下基于android ics系统

 

Android AP接口属性为 @hide,不对外开放,但通过revoke机制调用到。

 

Ap的几个重要接口

getWifiApState

setWifiApEnabled

getWifiApConfiguration

isWifiApEnabled

package com.lenovo.channel.method.ap.hotspot;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Map;import android.net.wifi.WifiConfiguration;import android.net.wifi.WifiManager;import android.os.Build;import com.lenovo.channel.method.ap.hotspot.Hotspot.WifiApState;import com.lenovo.common.BeanUtils;import com.lenovo.common.Logger;class WifiApManager {    private static final String tag = "WifiApManager";    private static final String METHOD_GET_WIFI_AP_STATE = "getWifiApState";    private static final String METHOD_SET_WIFI_AP_ENABLED = "setWifiApEnabled";    private static final String METHOD_GET_WIFI_AP_CONFIG = "getWifiApConfiguration";    private static final String METHOD_IS_WIFI_AP_ENABLED = "isWifiApEnabled";    private static final Map
methodMap = new HashMap
(); private static Boolean mIsSupport; private static boolean mIsHtc; public synchronized static final boolean isSupport() { if (mIsSupport != null) { return mIsSupport; } boolean result = Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO; if (result) { try { Field field = WifiConfiguration.class.getDeclaredField("mWifiApProfile"); mIsHtc = field != null; } catch (Exception e) { } } if (result) { try { String name = METHOD_GET_WIFI_AP_STATE; Method method = WifiManager.class.getMethod(name); methodMap.put(name, method); result = method != null; } catch (SecurityException e) { Logger.e(tag, "SecurityException", e); } catch (NoSuchMethodException e) { Logger.e(tag, "NoSuchMethodException", e); } } if (result) { try { String name = METHOD_SET_WIFI_AP_ENABLED; Method method = WifiManager.class.getMethod(name, WifiConfiguration.class, boolean.class); methodMap.put(name, method); result = method != null; } catch (SecurityException e) { Logger.e(tag, "SecurityException", e); } catch (NoSuchMethodException e) { Logger.e(tag, "NoSuchMethodException", e); } } if (result) { try { String name = METHOD_GET_WIFI_AP_CONFIG; Method method = WifiManager.class.getMethod(name); methodMap.put(name, method); result = method != null; } catch (SecurityException e) { Logger.e(tag, "SecurityException", e); } catch (NoSuchMethodException e) { Logger.e(tag, "NoSuchMethodException", e); } } if (result) { try { String name = getSetWifiApConfigName(); Method method = WifiManager.class.getMethod(name, WifiConfiguration.class); methodMap.put(name, method); result = method != null; } catch (SecurityException e) { Logger.e(tag, "SecurityException", e); } catch (NoSuchMethodException e) { Logger.e(tag, "NoSuchMethodException", e); } } if (result) { try { String name = METHOD_IS_WIFI_AP_ENABLED; Method method = WifiManager.class.getMethod(name); methodMap.put(name, method); result = method != null; } catch (SecurityException e) { Logger.e(tag, "SecurityException", e); } catch (NoSuchMethodException e) { Logger.e(tag, "NoSuchMethodException", e); } } mIsSupport = result; return isSupport(); } private final WifiManager mWifiManager; WifiApManager(WifiManager manager) { if (!isSupport()) { throw new RuntimeException("Unsupport Ap!"); } Logger.i(tag, "Build.BRAND -----------> " + Build.BRAND); mWifiManager = manager; } public WifiManager getWifiManager() { return mWifiManager; } public int getWifiApState() { try { Method method = methodMap.get(METHOD_GET_WIFI_AP_STATE); return (Integer) method.invoke(mWifiManager); } catch (Exception e) { Logger.e(tag, e.getMessage(), e); } return WifiApState.WIFI_AP_STATE_UNKWON; } private WifiConfiguration getHtcWifiApConfiguration(WifiConfiguration standard){ WifiConfiguration htcWifiConfig = standard; try { Object mWifiApProfileValue = BeanUtils.getFieldValue(standard, "mWifiApProfile"); if (mWifiApProfileValue != null) { htcWifiConfig.SSID = (String)BeanUtils.getFieldValue(mWifiApProfileValue, "SSID"); } } catch (Exception e) { Logger.e(tag, "" + e.getMessage(), e); } return htcWifiConfig; } public WifiConfiguration getWifiApConfiguration() { WifiConfiguration configuration = null; try { Method method = methodMap.get(METHOD_GET_WIFI_AP_CONFIG); configuration = (WifiConfiguration) method.invoke(mWifiManager); if(isHtc()){ configuration = getHtcWifiApConfiguration(configuration); } } catch (Exception e) { Logger.e(tag, e.getMessage(), e); } return configuration; } public boolean setWifiApConfiguration(WifiConfiguration netConfig) { boolean result = false; try { if (isHtc()) { setupHtcWifiConfiguration(netConfig); } Method method = methodMap.get(getSetWifiApConfigName()); Class
[] params = method.getParameterTypes(); for (Class
clazz : params) { Logger.i(tag, "param -> " + clazz.getSimpleName()); } if (isHtc()) { int rValue = (Integer) method.invoke(mWifiManager, netConfig); Logger.i(tag, "rValue -> " + rValue); result = rValue > 0; } else { result = (Boolean) method.invoke(mWifiManager, netConfig); } } catch (Exception e) { Logger.e(tag, "", e); } return result; } public boolean setWifiApEnabled(WifiConfiguration configuration, boolean enabled) { boolean result = false; try { Method method = methodMap.get(METHOD_SET_WIFI_AP_ENABLED); result = (Boolean)method.invoke(mWifiManager, configuration, enabled); } catch (Exception e) { Logger.e(tag, e.getMessage(), e); } return result; } public boolean isWifiApEnabled() { boolean result = false; try { Method method = methodMap.get(METHOD_IS_WIFI_AP_ENABLED); result = (Boolean)method.invoke(mWifiManager); } catch (Exception e) { Logger.e(tag, e.getMessage(), e); } return result; } private void setupHtcWifiConfiguration(WifiConfiguration config) { try { Logger.d(tag, "config= " + config); Object mWifiApProfileValue = BeanUtils.getFieldValue(config, "mWifiApProfile"); if (mWifiApProfileValue != null) { BeanUtils.setFieldValue(mWifiApProfileValue, "SSID", config.SSID); BeanUtils.setFieldValue(mWifiApProfileValue, "BSSID", config.BSSID); BeanUtils.setFieldValue(mWifiApProfileValue, "secureType", "open"); BeanUtils.setFieldValue(mWifiApProfileValue, "dhcpEnable", 1); } } catch (Exception e) { Logger.e(tag, "" + e.getMessage(), e); } } public static boolean isHtc() { return mIsHtc; } private static String getSetWifiApConfigName() { return mIsHtc? "setWifiApConfig": "setWifiApConfiguration"; }}

 

转载地址:http://wmhgl.baihongyu.com/

你可能感兴趣的文章
用Gvim建立IDE编程环境 (Windows篇)_Nothing is impossible for a willing heart._百度空间...
查看>>
Chrome 插件
查看>>
c++的重载,覆盖与隐藏
查看>>
大数据的三个入口
查看>>
void指针
查看>>
hackerrank-knapsack
查看>>
Atitit. 软件开发中的管理哲学--一个伟大的事业必然是过程导向为主 过程导向 vs 结果导向...
查看>>
hive load from hdfs出错
查看>>
IOS开发:xcode5版本引发的问题
查看>>
asp.net 负载均衡下session存储的解决方法
查看>>
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(17)-LinQ动态排序
查看>>
领域驱动开发推荐代码示例 — Microsoft NLayerApp
查看>>
Linux 安装Rsync和配置
查看>>
hadoop fs -mkdir testdata错误 提示No such file or directory
查看>>
PostgreSQL security - don't use password method in pg_hba.conf
查看>>
RDS MySql支持online ddl
查看>>
在Hudson中,使用ant自动对安卓项目编译打包apk
查看>>
【JSP开发】利用request获取各种值
查看>>
Vue全家桶web端社区项目
查看>>
多次Push Pop导致的`Can't add self as subview`问题
查看>>