Platform: Rockchip
android 热点 适配、OS: Android 6.0
Kernel: 3.10.92
手机ap热点怎么开。在Settings中选择要打开wifi热点功能:
调用流程如下:
onPreferenceChange -> TetherSettings.java
startProvisioningIfNecessary ->
startTethering ->
mWifiApEnabler.setSoftapEnabled ->
setSoftapEnabled -> WifiApEnabler.java
setWifiTethering -> TetherUtil.java
wifiManager.setWifiApEnabled ->
mService.setWifiApEnabled ->
setWifiApEnabled -> WifiServiceImpl.java
mWifiController.obtainMessage(CMD_SET_AP,...).sendToTarget ->
mWifiStateMachine.setHostApRunning -> ApStaDisabledState 类
setHostApRunning -> WifiStateMachine.java
sendMessage(CMD_START_AP, wifiConfig); ->
startSoftApWithConfig(config) -> SoftApStartingState类
startSoftApWithConfig ->
run -> WifiStateMachine.java
mNwService.startAccessPoint ->
startAccessPoint -> NetworkManagementService.java
mConnector.execute("softap", "startap");
execute -> NativeDaemonConnector.java
execute(DEFAULT_TIMEOUT, cmd, args);
executeForList ->
makeCommand
mOutputStream.write //通过socket发送command给netd. mOutputStream在listenToSocket()初始化.
Netd接收到命令后:
SocketListener::runListener -> SocketListener.cpp
onDataAvailable ->
FrameworkListener::onDataAvailable -> FrameworkListener.cpp
FrameworkListener::dispatchCommand ->
c->runCommand -> //支持各种命令,这里是softap.
CommandListener::SoftapCmd::runCommand
sSoftapCtrl->startSoftap -> //sSoftapCtrl在CommandListener::CommandListener()构造函数中赋值,是类SoftapController
SoftapController::startSoftap -> SoftapController.cpp
pid = fork //创建一个进程来处理.
execl(HOSTAPD_BIN_FILE, HOSTAPD_BIN_FILE,"-e", WIFI_ENTROPY_FILE,HOSTAPD_CONF_FILE, (char *) NULL)
static const char HOSTAPD_BIN_FILE[] = "/system/bin/hostapd";
所以本质上执行的是/system/bin/hostapd
自己操作也可以通过命令行方式开启热点, 例如:
hostapd -e /data/misc/wifi/entropy.bin /data/misc/wifi/hostapd.conf
参考网友画的网络框架图,因此分三个部分,分别是WIFI, DNS以及SoftAP.
参考:
http://blog.csdn.net/jshazk1989/article/details/8988444
http://blog.csdn.net/tony_hrwk/article/details/17550497
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态