Android TVSetting Wifi连接分析(一)

基于Android 9.0 ATV版 TVSetting源码,研究TVSetting Wifi连接方法

最近再做投影的系统设置,再做wifi连接部分,总是感觉写的不太好,所以研究了一下TVSetting 的WIFI连接部分,学习一下。

Android TVSetting Wifi连接分析(一)

Android TVSetting Wifi连接分析(二)

Android TVSetting Wifi连接分析(三)

TVSetting wifi连接部分的代码位于packages\apps\TvSettings\Settings\src\com\android\tv\settings\connectivity下。

为了更好的理解,首先将该目录下的相关java文件进行概括性了解

1.主菜单项

➢NetworkActivity.java

负责启动NetworkFragment

➢NetworkFragment.java

TVSetting 网络主菜单,这里罗列NetworkFragment持有的几个关键类

mConnectivityListener(ConnectivityListener):实现具体的wifi策略

mWifiNetworksCategory(CollapsibleCategory):显示wifi列表,继承PreferenceCategory。每个wifi热点,都会创建一个AccessPointPreference,然后加入到mWifiNetworksCategory中

 private void updateWifiList() {
    ............
      //获得扫描到的wifi
     final Collection<AccessPoint> accessPoints = mConnectivityListener.getAvailableNetworks();
        int index = 0;
        for (final AccessPoint accessPoint : accessPoints) {
            //为每个访问点创建监听
            accessPoint.setListener(this);
            //创建AccessPointPreference 
            AccessPointPreference pref = (AccessPointPreference) accessPoint.getTag();
            if (pref == null) {
                pref = new AccessPointPreference(accessPoint, themedContext, mUserBadgeCache,
                        false);
                accessPoint.setTag(pref);
            } else {
                toRemove.remove(pref);
            }
            //根据wifi状态设置单击选项进入的界面
            if (accessPoint.isActive()) {
                pref.setFragment(WifiDetailsFragment.class.getName());
                WifiDetailsFragment.prepareArgs(pref.getExtras(), accessPoint);
                pref.setIntent(null);
            } else {
                pref.setFragment(null);
                pref.setIntent(WifiConnectionActivity.createIntent(getContext(), accessPoint));
            }
            pref.setOrder(index++);
            // Double-adding is harmless
            mWifiNetworksCategory.addPreference(pref);
        }
    ...........
}

2.公共核心类

➢ConnectivityListener.java--负责监听网络状态,其中持有的几个关键类

mWifiTracker(管理wifi扫描和结果,位于com.android.settingslib.wifi.WifiTracker)

mWifiManager(管理wifi)

mEthernetManager(管理以太网)

3.wifi部分

➢WifiConnectionActivity.java -wifi未连接会进入到该界面

➢WifiDetailsFragment.java-wifi已连接会调用,显示wifi细节

➢WifiConfig.java-wifi配置

➢WifiConfigHelper.java-wifi配置Helper类

3.1.wifi状态机

TVSetting 为每个wifi维护了一个AccessPointPreference,为了更好的管理每个热点的状态,采用了状态机的方法来管理的设计模式,值得借鉴。

3.1 .1公共类packages\apps\TvSettings\Settings\src\com\android\tv\settings\connectivity\util

➢StateMachine.java-状态机管理类

➢State.java-状态机父类

➢Transition.java-状态机转换类

3.1.2 wifi状态
➢ConnectAuthFailureState.java-连接失败
➢ConnectFailedState.java-连接失败状态
➢ConnectRejectedByApState.java
➢ConnectState.java-连接状态
➢ConnectTimeOutState.java-连接超时状态
➢EnterPasswordState.java-输入密码状态
➢KnownNetworkState.java-未知网络状态
➢SuccessState.java--连接成功状态
➢OptionsOrConnectState.java
➢AddStartState.java --添加wifi状态
➢FinishState.java --完成状态

3.2.附录编译调试方法

编译TvSettings

mmm packages/apps/TvSettings/Settings/

编译SettingsLib

屏蔽packages\SettingsLib\Android.mk最后一句话

# For the test package.
#include $(call all-makefiles-under, $(LOCAL_PATH))

mmm frameworks/base/packages/SettingsLib/
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值