Android開機自動啟動Wi-Fi熱點的方法


簡介

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;



// 構造函數中啟動AP
public 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做初始化動作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM