android框架_5.0的Settings模块之WIFI没模块的分析4_009

本文深入解析了Android系统中WifiSettings.java文件的关键代码片段,详细介绍了该类如何通过构造方法、广播接收器及监听器实现Wi-Fi设置的各项功能,如网络连接、断开、保存等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、重点分析基类:WifiSettings.java

public class WifiSettings extends RestrictedSettingsFragment
        implements DialogInterface.OnClickListener, Indexable  {

    private static final String TAG = "WifiSettings";

    /* package */ static final int MENU_ID_WPS_PBC = Menu.FIRST;
    private static final int MENU_ID_WPS_PIN = Menu.FIRST + 1;
    private static final int MENU_ID_SAVED_NETWORK = Menu.FIRST + 2;
    /* package */ static final int MENU_ID_ADD_NETWORK = Menu.FIRST + 3;
    private static final int MENU_ID_ADVANCED = Menu.FIRST + 4;
    private static final int MENU_ID_SCAN = Menu.FIRST + 5;
    private static final int MENU_ID_CONNECT = Menu.FIRST + 6;
    private static final int MENU_ID_FORGET = Menu.FIRST + 7;
    private static final int MENU_ID_MODIFY = Menu.FIRST + 8;
    private static final int MENU_ID_WRITE_NFC = Menu.FIRST + 9;

    public static final int WIFI_DIALOG_ID = 1;
    /* package */ static final int WPS_PBC_DIALOG_ID = 2;
    private static final int WPS_PIN_DIALOG_ID = 3;
    private static final int WRITE_NFC_DIALOG_ID = 6;

1、定义id

public WifiSettings() {
    super(DISALLOW_CONFIG_WIFI);
    mFilter = new IntentFilter();
    mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);//wifi状态的改变
    mFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);//wifi扫描几个
    mFilter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION);//网络id改变
    mFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);//
    mFilter.addAction(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION);//网络改变认证
    mFilter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION);//链接改变
    mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);//网络状态改变
    mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);//RSSI的状态
    /// M: add no WAPI certification action
    mFilter.addAction(WifiManager.NO_CERTIFICATION_ACTION);//不认证的action
		//注册广播;
    mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            handleEvent(intent);
        }
    };
		//声明handler
    mScanner = new Scanner(this);
}

 

2、构造方法中注册广播;

 

/**
 * M: add mtk feature and bug fix
 * @param icicle
 */
@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    mWifiSettingsExt = new WifiSettingsExt(getActivity());
    mWifiSettingsExt.onCreate();
}

/**
 *M: unregister priority observer
 */
@Override
public void onDestroy() {
    mWifiSettingsExt.unregisterPriorityObserver(getContentResolver());
    super.onDestroy();
}

3、声明WifiSettingsExt对象和注销WifiSettingsExt对象,接下来看onActivityCreated方法:

 

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

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

        mConnectListener = new WifiManager.ActionListener() {
                                   @Override
                                   public void onSuccess() {
                                       /// M: update priority after connnect AP @{
                                       mWifiSettingsExt.updatePriority();
                                       /// @}
                                   }
                                   @Override
                                   public void onFailure(int reason) {
                                       Activity activity = getActivity();
                                       if (activity != null) {
                                           Toast.makeText(activity,
                                                R.string.wifi_failed_connect_message,
                                                Toast.LENGTH_SHORT).show();
                                       }
                                   }
                               };

4、这里很简单,声明一个WifiManager,然后实现一个连接wifi的接口;

        mSaveListener = new WifiManager.ActionListener() {
                                @Override
                                public void onSuccess() {
                                    /// M: update priority after modify AP config @{
                                    mWifiSettingsExt.updatePriority();
                                    /// @}
                                }
                                @Override
                                public void onFailure(int reason) {
                                    Activity activity = getActivity();
                                    if (activity != null) {
                                        Toast.makeText(activity,
                                            R.string.wifi_failed_save_message,
                                            Toast.LENGTH_SHORT).show();
                                    }
                                }
                            };

5、实现保存wifi的监听器;

        mForgetListener = new WifiManager.ActionListener() {
                                   @Override
                                   public void onSuccess() {
                                       /// M: update priority after connnect AP @{
                                       mWifiSettingsExt.updatePriority();
                                       /// @}
                                   }
                                   @Override
                                   public void onFailure(int reason) {
                                       Activity activity = getActivity();
                                       if (activity != null) {
                                           Toast.makeText(activity,
                                               R.string.wifi_failed_forget_message,
                                               Toast.LENGTH_SHORT).show();
                                       }
                                   }
                               };

6、忘记wifi的接口

        if (savedInstanceState != null) {
            mDlgEdit = savedInstanceState.getBoolean(SAVE_DIALOG_EDIT_MODE);
            if (savedInstanceState.containsKey(SAVE_DIALOG_ACCESS_POINT_STATE)) {
                mAccessPointSavedState =
                    savedInstanceState.getBundle(SAVE_DIALOG_ACCESS_POINT_STATE);
            }
            /// M: to solve Write to NFC tag JE @{
            if (savedInstanceState.containsKey(SAVE_NFC_DIALOG_ACCESS_POINT_STATE)) {
                mNFCAccessPointSavedState =
                    savedInstanceState.getBundle(SAVE_NFC_DIALOG_ACCESS_POINT_STATE);
            }
            /// @}
        }

        // if we're supposed to enable/disable the Next button based on our current connection
        // state, start it off in the right state
        Intent intent = getActivity().getIntent();
        mEnableNextOnConnection = intent.getBooleanExtra(EXTRA_ENABLE_NEXT_ON_CONNECT, false);

        if (mEnableNextOnConnection) {
            if (hasNextButton()) {
                final ConnectivityManager connectivity = (ConnectivityManager)
                        getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
                if (connectivity != null) {
                    NetworkInfo info = connectivity.getNetworkInfo(
                            ConnectivityManager.TYPE_WIFI);
                    changeNextButtonState(info.isConnected());
                }
            }
        }

        addPreferencesFromResource(R.xml.wifi_settings);

        mEmptyView = initEmptyView();
        registerForContextMenu(getListView());
        setHasOptionsMenu(true);

        ///M: add mtk feature
        mWifiSettingsExt.onActivityCreated(this, mWifiManager);


        if (intent.hasExtra(EXTRA_START_CONNECT_SSID)) {
            String ssid = intent.getStringExtra(EXTRA_START_CONNECT_SSID);
            updateAccessPoints();
            PreferenceScreen preferenceScreen = getPreferenceScreen();
            for (int i = 0; i < getAccessPointsCount(); i++) {
                Preference preference = mWifiSettingsExt.getPreference(preferenceScreen, i);
                if (preference instanceof AccessPoint) {
                    AccessPoint accessPoint = (AccessPoint) preference;
                    if (ssid.equals(accessPoint.ssid) && accessPoint.networkId == -1
                            && accessPoint.security != AccessPoint.SECURITY_NONE) {
                        onPreferenceTreeClick(preferenceScreen, preference);
                        break;
                    }
                }
            }
        }
    }

7、初始化一些数据;

未完待续!!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值