简介

Android(4.4)的Wi-Fi子系统目前支持三种工作模式:

  • Station
  • Access Point
  • Wi-Fi Direct

对于某些设备来说,可能需要Wi-Fi开机就进入到AP(Access Point)模式,然后扮演一个共享热点的角色。

WifiManager类是Android开放给应用开发者的主要接口,里面提供了Station和AP模式下的常用函数,AP相关的主要有(这些目前是隐藏的,未对应用开发者开放出来):

  • setWifiApEnabled
  • getWifiApState
  • isWifiApEnabled
  • getWifiApConfiguration
  • setWifiApConfiguration

有关这些接口的详细用法,可以参见代码中的“framework/base/wifi/java/android/net/wifi/WifiManager.java”。

要在开机过程中开启AP模式的话,我们只需要在一个合适的地方(比如ConnecitivityService.java)调用WifiManager就可以了。

修改步骤

ConnectivityService是Android的连接管理服务,它由SystemServer启动,负责各个网络的连接策略管理,以及网络分享(Tether)等。我们在其构造函数的最后加上我们的逻辑即可。

import android.net.wifi.WifiManager;import android.net.wifi.WifiConfiguration;// 构造函数中启动APpublic ConnectivityService(Context context, INetworkManagementService netd,        INetworkStatesService statsService, INetworkPolicyManager policyManager) {    this(context, netd, statsService, policyManager, null);    // 启动AP模式    final WifiManager mWifimanager;    final WifiConfiguration mWifiConfig;    mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);    mWifiConfig = mWifiManager.getWifiApConfiguration();    mWifiManager.setWifiApEnabled(mWifiConfig, true);}

以下两个文件中也有相关操作,可以参考一下:

  • packages/apps/Setttings/src/com/android/settings/wifi/WifiApEnabler.java
  • packages/apps/Setttings/src/com/android/settings/TetherSettings.java

引入问题

由于在ConnectivityService里偷偷启动了AP模式,Settings启动后,“无线热点”中的CheckBox的状态会与真实状态不同步。需要对CheckBox根据getWifiApState做初始化动作。

转载于:https://www.cnblogs.com/flynnjiang/p/3740248.html

更多相关文章

  1. C语言函数的递归(上)
  2. 移动端开发新趋势Flutter
  3. Android(安卓)Camera 使用小结
  4. android 积累一点关于fragment的知识
  5. 使用TraceView进行方法跟踪
  6. Android(安卓)JNI 调用 C/C++
  7. Qt on Android(安卓)Episode 5(翻译)
  8. Android(安卓)NDk 开发简易教程
  9. Android(安卓)OTA 升级之五:updater

随机推荐

  1. IE中使用jquery的Google geomap失败
  2. 动态更改angularjs中静态段落的颜色
  3. javascript的密封对象之seal(),isSealed(
  4. 对多维数组中的列进行排序
  5. 如何调用另一个函数内的函数?
  6. 如何在onchange()事件后调用的方法中将焦点
  7. 在角JS中Bootstrapping是什么意思?
  8. 动态左侧的GreenSock javascript动画
  9. 使用HTML或Javascript替换网页上的文本
  10. 父范围中的变量不会在匿名函数中被更改[