WLAN 入门(二)

我们都知道其他应用都是使用WifiManager来访问wifi.文件位于

./frameworks/base/wifi/java/android/net/wifi/WifiManager.java

它是public  类,并且有很多public方法。public 状态属性。

通常是直接打开关闭wifi,读取wifi的状态,或者添加一个过滤器和receiver,这样wifi有何种状态变化都会通知到。

mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

定义于Context.java 这个抽象类中

public abstract Object getSystemService(@ServiceName @NonNull String name);

它的实现位于 ContextImpl.java 中

/**
 * Common implementation of Context API, which provides the base
 * context object for Activity and other application components.
 */
class ContextImpl extends Context {

。。。
@Override
    public Object getSystemService(String name) {
        ServiceFetcher fetcher = SYSTEM_SERVICE_MAP.get(name);
        return fetcher == null ? null : fetcher.getService(this);
    }




    private static final HashMap<String, ServiceFetcher> SYSTEM_SERVICE_MAP =
            new HashMap<String, ServiceFetcher>();

    private static int sNextPerContextServiceCacheIndex = 0;
    private static void registerService(String serviceName, ServiceFetcher fetcher) {
        if (!(fetcher instanceof StaticServiceFetcher)) {
            fetcher.mContextCacheIndex = sNextPerContextServiceCacheIndex++;
        }
        SYSTEM_SERVICE_MAP.put(serviceName, fetcher);
    }


}

是通过名字在一个表格中查到的,这个表格需要开机的时候初始化一次,而且只能做一次。

 static {
。。。
        
        registerService(WIFI_SERVICE, new ServiceFetcher() {
                public Object createService(ContextImpl ctx) {
                    IBinder b = ServiceManager.getService(WIFI_SERVICE);
                    IWifiManager service = IWifiManager.Stub.asInterface(b);
                    return new WifiManager(ctx.getOuterContext(), service);
                }});

        registerService(WIFI_P2P_SERVICE, new ServiceFetcher() {
                public Object createService(ContextImpl ctx) {
                    IBinder b = ServiceManager.getService(WIFI_P2P_SERVICE);
                    IWifiP2pManager service = IWifiP2pManager.Stub.asInterface(b);
                    return new WifiP2pManager(service);
                }});

        registerService(WIFI_SCANNING_SERVICE, new ServiceFetcher() {
            public Object createService(ContextImpl ctx) {
                IBinder b = ServiceManager.getService(WIFI_SCANNING_SERVICE);
                IWifiScanner service = IWifiScanner.Stub.asInterface(b);
                return new WifiScanner(ctx.getOuterContext(), service);
            }});

        registerService(WIFI_RTT_SERVICE, new ServiceFetcher() {
            public Object createService(ContextImpl ctx) {
                IBinder b = ServiceManager.getService(WIFI_RTT_SERVICE);
                IRttManager service = IRttManager.Stub.asInterface(b);
                return new RttManager(ctx.getOuterContext(), service);
            }});

        registerService(ETHERNET_SERVICE, new ServiceFetcher() {
                public Object createService(ContextImpl ctx) {
                    IBinder b = ServiceManager.getService(ETHERNET_SERVICE);
                    IEthernetManager service = IEthernetManager.Stub.asInterface(b);
                    return new EthernetManager(ctx.getOuterContext(), service);
                }});
。。。
}

这里的几个重点为 WifiManager --> WifService

我们先看一下WifiService的实现体 WifiServiceImpl.java,在构造函数中

        @WifiServiceImpl.java
        public WifiServiceImpl(Context context) {
            mContext = context;
            mInterfaceName =  SystemProperties.get("wifi.interface", "wlan0");
            mTrafficPoller = new WifiTrafficPoller(mContext, mInterfaceName);
            //创建wifi状态机
            mWifiStateMachine = new WifiStateMachine(mContext, mInterfaceName, mTrafficPoller);
            mWifiStateMachine.enableRssiPolling(true);
            //初始化各种管理者
            mBatteryStats = BatteryStatsService.getService();
            mAppOps = (AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE);
            mNotificationController = new WifiNotificationController(mContext, mWifiStateMachine);
            mSettingsStore = new WifiSettingsStore(mContext);
            HandlerThread wifiThread = new HandlerThread("WifiService");
            wifiThread.start();
            mClientHandler = new ClientHandler(wifiThread.getLooper());
            mWifiStateMachineHandler = new WifiStateMachineHandler(wifiThread.getLooper());
            mWifiController = new WifiController(mContext, this, wifiThread.getLooper());
            mBatchedScanSupported = mContext.getResources().getBoolean( R.bool.config_wifi_batched_scan_supported);
        }

   

WifiStateMachine 状态控制,里面有所有状态的状态机。

WifiController 接收到WifiManager的控制之后,将控制信息传给状态机。其实WifiController 也是一个状态机,它和mWifiStateMachine 不同,WifiStateMachine 表述wifi具体的状态,比如supplicant启动/关闭状态,driver启动/关闭状态等,mWifiController 则更高一级的控制wifi设备的开关状态,wifi热点的开关状态等

WifiMonitor 监控中间层的事件,上报。

WifiNative 中间接口层。

下面是一个总体框架图。

https://www.2cto.com/kf/201610/555235.html

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WLAN产品快速入门合集是一个包含有关WLAN产品的基本操作指南的PDF文件。这个合集旨在帮助用户快速了解和使用WLAN产品。 在合集中,首先介绍了WLAN产品的基本概念和工作原理。用户可以了解到WLAN是一种无线局域网技术,它使用无线信号传输数据,并通过路由器将无线信号转换为有线信号,以连接设备和互联网。 接下来,合集详细介绍了WLAN产品的安装步骤。用户可以学习如何正确设置和连接无线路由器,以及配置无线网络的名称和密码。此外,还提供了一些常见问题的解决方案,例如无线信号弱、无法连接互联网等问题。 合集还包含了一些实用的技巧和建议,用于提高WLAN产品的性能和安全性。用户可以了解到如何选择一个合适的频段和信道,以避免干扰和重叠。此外,用户也可以学习到如何加密无线网络,以保护个人信息和数据的安全。 最后,合集提供了一些常见故障排除的方法。用户可以根据故障现象和提示,尝试自行解决问题。如果遇到更复杂的问题,用户还可以在合集中找到联系技术支持的方式,以获取进一步的帮助和支持。 总之,WLAN产品快速入门合集是一个有关WLAN产品的实用指南,它可以帮助用户快速了解和使用WLAN产品,解决常见问题,并提供一些技巧和建议,以提升产品性能和安全性。无论是初学者还是有一定经验的用户,都可以从中受益。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值