Android 在APP內、應用內 連接WiFi

Android 在應用內連接特定的WiFi

前言

微博上有個段子廣為流傳:海邊度假酒店老板說各國游客來了需求都不一樣: 法國人來了問這附近美女多么? 德國人來了就成天潛水;意大利人來了就整天曬日光浴;中國人來了挨個問:有WiFi么?WiFi密碼多少?

首先需要在AndroidManifext.xml中添加以下權限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <!-- for Android 6 and above -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- for Android 6 and above -->

通過如下代碼,可以實現(xiàn)連接到這個ssid的WiFi

String ssid = "work.dookay.com";
String key = "1q23l_yc45j_";

WifiConfiguration wifiConfig = new WifiConfiguration();
wifiConfig.SSID = String.format("\"%s\"", ssid);
wifiConfig.preSharedKey = String.format("\"%s\"", key);

 WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
 int netId = wifiManager.addNetwork(wifiConfig);
wifiManager.disconnect();
 wifiManager.enableNetwork(netId, true);
 wifiManager.reconnect();

啟用WiFi

 WifiUtils.withContext(getApplicationContext()).enableWifi(this::checkResult);
 
  private void checkResult(boolean isSuccess)
  {
       if (isSuccess)
           Toast.makeText(MainActivity.this, "WIFI ENABLED", Toast.LENGTH_SHORT).show();
       else
           Toast.makeText(MainActivity.this, "COULDN'T ENABLE WIFI", Toast.LENGTH_SHORT).show();
  }

啟用WiFi且無需回調的方式:

 WifiUtils.withContext(getApplicationContext()).enableWifi();

禁用WiFi

WifiUtils.withContext(getApplicationContext()).disableWifi();

掃描可用WiFi

WifiUtils.withContext(getApplicationContext()).scanWifi(this::getScanResults).start();

private void getScanResults(@NonNull final List<ScanResult> results)
{
    if (results.isEmpty())
    {
        Log.i(TAG, "SCAN RESULTS IT'S EMPTY");
        return;
    }
    Log.i(TAG, "GOT SCAN RESULTS " + results);
}

連接WiFi

你必須知道這個WiFi的SSID和WPA/WPS2密鑰

 WifiUtils.withContext(getApplicationContext())
                        .connectWith("YourWiFi", "YourWiFiPassword")
                        .onConnectionResult(this::checkResult)
                        .start();

  private void checkResult(boolean isSuccess)
  {
        if (isSuccess)
            Toast.makeText(MainActivity.this, "CONNECTED YAY", Toast.LENGTH_SHORT).show();
        else
            Toast.makeText(MainActivity.this, "COULDN'T CONNECT", Toast.LENGTH_SHORT).show();
  }

取消正在連接

有兩種方式:

  • 如果一個連接所需的時間太長而沒要回調,那么你可以用setTimeout(毫秒)方法來設置一個時效,默認時效為30秒
WifiUtils.withContext(getApplicationContext())
                     .connectWith("YourWiFi", "YourWiFiPassword")
                     .setTimeout(15000) //15秒
                     .onConnectionResult(this::checkResult)
                     .start();
  • 可以用以下方式立即取消連接
 WifiConnectorBuilder.WifiUtilsBuilder builder = WifiUtils.withContext(getApplicationContext());
 builder.connectWith("YourWiFi", "YourWiFiPassword")
 .onConnectionResult(this::checkResult)
 .start();
 builder.cancelAutoConnect();

PS:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容