簡體   English   中英

如何在Android中連接到預配置的Wifi?

[英]How to connect to pre-configured Wifi in Android?

所以我一直在為自己弄清楚這些東西時遇到一些麻煩,而我在Android上還是個新手,因此非常感謝在此方面的一些幫助。

我已經看過諸如此類的答案: 如何通過編程方式連接到Android中的特定Wi-Fi網絡?

並且我看到您必須配置一個網絡,手動輸入密碼,並將其添加到已配置的網絡列表中,依此類推。

我想知道在用戶已經配置/保存了多個wifi的情況下該怎么辦,並選擇一個特定的以編程方式連接的wifi? 這是否意味着它們已經出現在getConfiguredNetworks()方法調用中? 如果是這樣,如何執行.enableNetwork(int netId,boolean disableOthers)?

附帶說明,這兩個功能都是WifiManager類的一部分。 希望這一切都說得通!

WifiManager wifiManager = (WifiManager)context.getSystemService(WIFI_SERVICE);              
int netId = -1;         
for (WifiConfiguration tmp : wifiManager.getConfiguredNetworks()) 
   if (tmp.SSID.equals( "\""+"Your SSID"+"\"")) 
   {
      netId = tmp.networkId;                   
      wifiManager.enableNetwork(netId, true);
   }

只需將第三行中的字符串“ Your SSID”更改為要連接的SSID。

並在清單中添加此權限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

我對StackOverflow的第一份貢獻,希望對您有所幫助:D

連接到現有配置的主要問題是,您正在尋找具有SSID密鑰的現有網絡,該密鑰不是網絡的唯一密鑰。 您可以在家中擁有兩個具有相同SSID的不同網絡,或者可能是從上次設備連接到該網絡以來更改了網絡密碼。 如果您的應用程序的目標版本低於6.0,則可以更新已保存的配置,否則,您有問題,必須創建新的WifiConfiguration並保存。

Android Developer關於Android 6.0的更改:

現在,只有創建了這些對象,您的應用程序才能更改WifiConfiguration對象的狀態。 您無權修改或刪除用戶或其他應用創建的WifiConfiguration對象。

我發現最好的情況是,我嘗試使用相同的SSID連接到每個已保存的網絡,並且如果每個配置都無法連接,則我已將新配置添加並保存到設備。

wifiManager.enableNetwork(wifiConfiguration.networkId,true);我回答了racuevji並對其進行了詳細說明。 還需要更多權限,如果wifi已關閉,則以下解決方案也會將其打開:

public class MainActivity extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
                if (!wifiManager.isWifiEnabled())
                {
                    MainActivity.this.registerReceiver(myWifiStateListener,
                                                       new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
                    wifiManager.setWifiEnabled(true);
                }
                connectToSSID(wifiManager, "your_ssid");
            }
        });
    }

    private void connectToSSID(WifiManager wifiManager, String ssid)
    {
        for (WifiConfiguration wifiConfiguration : wifiManager.getConfiguredNetworks())
        {
            if (wifiConfiguration.SSID.equals("\"" + ssid + "\""))
            {
                wifiManager.enableNetwork(wifiConfiguration.networkId, true);
            }
        }
    }

    private BroadcastReceiver myWifiStateListener
            = new BroadcastReceiver()
    {

        @Override
        public void onReceive(Context arg0, Intent arg1)
        {
            NetworkInfo networkInfo = arg1.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
            if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI)
            {
                if(networkInfo.getState()== NetworkInfo.State.CONNECTED)
                {
                    connectToSSID((WifiManager) getSystemService(WIFI_SERVICE), "pix4d_office");
                    MainActivity.this.unregisterReceiver(myWifiStateListener);
                }
            }
        }
    };
}

其中activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                android:paddingBottom="@dimen/activity_vertical_margin"
                tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button" android:layout_below="@+id/textView"
        android:layout_toEndOf="@+id/textView" android:layout_marginTop="75dp"/>

</RelativeLayout>

和AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="damsoft.com.wifitest" >
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM