一、重点分析基类: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、初始化一些数据;
未完待续!!!