setting目录下的wifi文件简介
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在setting的wifi目录看到什么
总结一句话:全部是一堆的ui组件来get和set 的framework的内容,基本无逻辑
Contents
AccessPoint.java添加CMCC等三个AP,有较多修改 (2)
AdvancedWifiSettings.java—menu (3)
HostAp (4)
WifiApDialog.java 对hostAp 的WifiConfiguration配置Diag (4)
WifiApEnabler.java开关hostAp,不是wifi (4)
TetherSettings.java (5)
Wifi测试工程模式下的三个菜单项input *#*#4636#*#*: (5)
WifiAPITest.java测试1---API (6)
WifiStatusTest.java测试2---状态 (6)
WifiConfigInfo.java测试3---config显示 (6)
WifiConfigController\ WifiConfigUiBase –三个不是工程模式 (7)
WifiScanModeActivity.java – menu后scan吗? (9)
WifiSettings.java (10)
新添加的WifiPrioritySettings.java 为了三种模式 (10)
这个summary怎么没有用到奇怪啊!!! (11)
Android Wireless Architecture –3 part (11)
Android Wireless Architecture can be divided in three part (11)
File list (14)
AccessPoint.java添加CMCC等三个AP,有较多修改
其中的
import workInfo.DetailedState;
import .wifi.ScanResult;
import .wifi.WifiConfiguration;
import .wifi.WifiConfiguration.KeyMgmt;
import .wifi.WifiInfo;
import .wifi.WifiManager;
首先要看的,这里和好多的net/wifi相关的在framework中的内容了。
class AccessPoint extends Preference {
public int compareTo(Preference preference)
public boolean equals(Object other) {
if (!(other instanceof AccessPoint)) return false;
return (pareTo((AccessPoint) other) == 0);
}
public String getSecurityString(boolean concise) {
concise -- ***.short***
public int hashCode() { ---no used.
static final String CARRIER_SSID = "CMCC";
static final String CARRIER_EDU_SSID = "CMCC-EDU";
static final String CARRIER_AUTO_SSID = "CMCC-AUTO";
private WifiConfiguration mConfig;
/* package */ScanResult mScanResult; --- 这个在framework中的net/wifi中详细的定义了。
这里有链接的状态了。
public enum DetailedState {
/** Ready to start data connection setup. */
IDLE,
/** Searching for an available access point. */
SCANNING,
/** Currently setting up data connection. */
CONNECTING,
/** Network link established, performing authentication. */
AUTHENTICATING,
/** Awaiting response from DHCP server in order to assign IP address information. */
OBTAINING_IPADDR,
/** IP traffic should be available. */
CONNECTED,
/** IP traffic is suspended */
SUSPENDED,
/** Currently tearing down data connection. */
DISCONNECTING,
/** IP traffic not available. */
DISCONNECTED,
/** Attempt to connect failed. */
FAILED,
/** Access to this network is blocked. */
BLOCKED,
/** Link has poor connectivity. */
VERIFYING_POOR_LINK,
/** Checking if network is a captive portal */
CAPTIVE_PORTAL_CHECK
}
AdvancedWifiSettings.java—menu
public class AdvancedWifiSettings extends SettingsPreferenceFragment private void updateSleepPolicySummary(Preference sleepPolicyPref, String value) {
这里干了什么,不是明白,什么的协议!!!
public static final int wifi_sleep_policy_entries=0x7f070022;
/** Wi-Fi settings. Presented as a list dialog to the user to choose the Wi-Fi sleep policy. Used when
the device is Wi-Fi-only. [CHAR LIMIT=30]
*/
public static final int
wifi_sleep_policy_entries_wifi_only=0x7f070023;
private void updateFrequencyBandSummary(Preference frequencyBandPref, int index) {
String[] summaries =
getResources().getStringArray(R.array.wifi_frequency_band_entries);
frequencyBandPref.setSummary(summaries[index]);
}
HostAp
WifiApDialog.java 对hostAp 的WifiConfiguration配置Diag
import .wifi.WifiConfiguration;
import .wifi.WifiConfiguration.AuthAlgorithm;
import .wifi.WifiConfiguration.KeyMgmt;
public WifiConfiguration getConfig() {
WifiConfiguration config = new WifiConfiguration();
WifiApEnabler.java开关hostAp,不是wifi
应该是一个简单的类这个同这些内容
import .ConnectivityManager;
import workInfo;
import .wifi.SupplicantState;
import .wifi.WifiConfiguration;
import .wifi.WifiInfo;
import .wifi.WifiManager;
public class WifiApEnabler {
private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override
public void onReceive(Context context, Intent intent) {
这个就是一个接受。
这个可能就是hostAp的开关吧,disable和enable相关的内容都在这里吧!!!!
public WifiApEnabler(Context context, CheckBoxPreference checkBox) { mContext = context;
mCheckBox = checkBox;
mOriginalSummary = checkBox.getSummary();
checkBox.setPersistent(false);
mWaitForWifiStateChange = true;
mWifiManager = (WifiManager)
context.getSystemService(Context.WIFI_SERVICE);
mCm =
(ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
mWifiRegexs = mCm.getTetherableWifiRegexs();
mIntentFilter = new
IntentFilter(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
mIntentFilter.addAction(ConnectivityManager.ACTION_TETHER_STATE_CHANGED);
mIntentFilter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
mIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
}
主要接口就是两个
public void setSoftapEnabled(boolean enable) {
public void updateConfigSummary(WifiConfiguration wifiConfig) {
TetherSettings.java
其实的使用在TetherSettings.java – tether范围的意思—应该翻译成共享,分为USB、wifi 和bt三种共享方式。
public boolean onPreferenceChange(Preference preference, Object value) { boolean enable = (Boolean) value;
if (enable) {
startProvisioningIfNecessary(WIFI_TETHERING);
} else {
mWifiApEnabler.setSoftapEnabled(false);
}
return false;
}
Wifi测试工程模式下的三个菜单项input *#*#4636#*#*:
WifiAPITest.java测试1---API
/**
* Provide an interface for testing out the Wifi API
*/
public class WifiAPITest extends PreferenceActivity implements
Preference.OnPreferenceClickListener {
这个100多行的程序的,就是一个perferenceActivity,很贴切的地方啊!
WifiStatusTest.java测试2---状态
整个代码很简单的,先定义一个BroadcReceiver
然后得到
mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
mWifiStateFilter = new
IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
mWifiStateFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
mWifiStateFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); registerReceiver(mWifiStateReceiver, mWifiStateFilter);
然后,注册一些intent。
第四,定义两个button:
一个refresh
updateButton = (Button) findViewById(R.id.update);
updateButton.setOnClickListener(updateButtonHandler);
另一个ping
pingTestButton = (Button) findViewById(R.id.ping_test);
pingTestButton.setOnClickListener(mPingButtonHandler);
最后就是简单的两个ping和http clinet测试,整个十分的简单,没有任何逻辑。
WifiConfigInfo.java测试3---config显示
无修改
1. Turn off Wi-Fi
2. Open the dialer and input *#*#4636#*#*
3. Navigate to Wi-Fi information -> Wi-Fi config and observe "Unfortunately,
/**
* Configuration details saved by the user on the WifiSettings screen */
public class WifiConfigInfo extends Activity {
WifiConfigController\ WifiConfigUiBase –三个不是工程模式
WifiConfigController.java
文件的内容及其的复杂啊,但是public的内容很少,why
/**
* The class for allowing UIs like {@link WifiDialog} and {@link WifiConfigUiBase} to
* share the logic for controlling buttons, text fields, etc.
*/
public class WifiConfigController implements TextWatcher,
AdapterView.OnItemSelectedListener, OnCheckedChangeListener {
WifiConfigUiBase.java
无修改
/**
* Foundation interface glues between Activities and UIs like
* {@link WifiDialog} or {@link WifiConfigUiForSetupWizardXL}.
*/
public interface WifiConfigUiBase {
WifiConfigUiForSetupWizardXL.java
无修改,
/**
* Shows simplified UI for configuring a wifi network. Used only in SetupWizard for XLarge
* screen.
*/
public class WifiConfigUiForSetupWizardXL implements WifiConfigUiBase, OnFocusChangeListener {
private static final String TAG = "SetupWizard";
WifiDialog.java
无修改
class WifiDialog extends AlertDialog implements WifiConfigUiBase {
WifiInfo.java
文件无内容几乎。
/**
* Wifi information menu item on the diagnostic screen
*/
public class WifiInfo extends PreferenceActivity {
WifiPickerActivity.java
无修改
public class WifiPickerActivity extends PreferenceActivity implements ButtonBarHandler {
发出一群intent
/**
* The ping functions have been borrowed from Radio diagnostic app to
* enable quick access on the wifi status screen
*/
private final void pingIpAddr() {
的确这个是从radio中看到的,两处都有这个定义,这个简单的,来ping ipaddress、ping host和 private void httpClientTest() {
这个很简单的代码。
private void httpClientTest() {
HttpClient client = new DefaultHttpClient();
try {
// TODO: Hardcoded for now, make it UI configurable
HttpGet request = new HttpGet(""); HttpResponse response = client.execute(request);
if (response.getStatusLine().getStatusCode() == 200) {
mHttpClientTestResult = "Pass";
} else {
mHttpClientTestResult = "Fail: Code: " +
String.valueOf(response);
}
request.abort();
} catch (IOException e) {
mHttpClientTestResult = "Fail: IOException";
}
}
/**
* Show the current status details of Wifi related fields
*/
public class WifiStatusTest extends Activity {
不明这个修改,为什么呢?
commit 0426b1936aeba9c3ed646fa2eb923807bba11c13
Author: luxiaol <luxiaol@>
Date: Wed Dec 18 20:08:23 2013 +0800
Settings: Invalid wifi/bluetooth switch in airplane mode
- wifi/bluetooth switch will be invalid in airplane mode
WifiScanModeActivity.java – menu后scan吗?
单单一个对话框吗?
/**
* This activity requests users permission to allow scanning even when Wi-Fi is turned off
*/
public class WifiScanModeActivity extends Activity {
就是一个强制的搜索吗?
private void doPositiveClick() {
Settings.Global.putInt(getContentResolver(),
Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE, 1);
Strings.xml (v:\.3.7.1\packages\apps\settings\res\values): <string
name="wifi_scan_always_available">Scanning always available</string>
WifiSettings.java
/**
* Two types of UI are provided here.
*
* The first is for "usual Settings", appearing as any other Setup fragment. *
* The second is for Setup Wizard, with a simplified interface that hides the action bar
* and menus.
*/
public class WifiSettings extends RestrictedSettingsFragment
implements DialogInterface.OnClickListener {
新添加的WifiPrioritySettings.java 为了三种模式
而且改动了好多的文件地方
summary.java
这个summary怎么没有用到奇怪啊!!!
Android Wireless Architecture –3 part
Android Wireless Architecture can be divided in three part
1 Java Framework (WiFiManager,WifiMonitor etc..),
2 HAL(wifi.c, wpa_supplicant) and
3 kernel space modules (Wireless stack, driver).
Following figure show the Android Wifi Architecture. Java Framework communicate with wpa_supplicant using native interface (wifi.c) . wpa_supplicant uses wireless extension to control wifi driver.
Application Framework code for WifiManager, WifiMonitor , WifiConfiguration are in base/wifi/java/android/net/wifi folder.
Jni code written in “android_net_wifi_Wifi.cpp” located in “frameworks/base/core/jni” folder. Which communicate with HAL layer.
HAL layer code is written in wifi.c(hardware/libhardware_legacy/wifi/). Code in wifi.c file communicate with wpa_supplicant over control interface.
Above shown architecture applies to the wireless drivers which uses wireless extension to communicate with driver. With the implementation of nl80211/cfg80211 many wireless drivers in main line kernel support nl80211 interface instead of wireless extension.
从call stack上看关系
File list
AccessPointCategoryForSetupWizardXL.java WifiConfigController.java WifiPrioritySettings.java
AccessPoint.java
WifiConfigInfo.java
WifiScanModeActivity.java
AdvancedWifiSettings.java
WifiConfigUiBase.java
WifiSettingsForSetupWizardXL.java
p2p
WifiConfigUiForSetupWizardXL.java
WifiSettings.java Summary.java WifiDialog.java WifiSetupActivity.java WifiApDialog.java WifiEnabler.java WifiStatusTest.java WifiApEnabler.java WifiInfo.java WpsDialog.java WifiAPITest.java WifiPickerActivity.java。