首页 > 解决方案 > 如何在android Q中使用ssid和密码连接WIFI?

问题描述

我想在android Q中使用SSID和密码连接到wifi网络,下面是我的连接代码。

  private void connect(String ssid,String password){
       WifiNetworkSpecifier.Builder builder = new WifiNetworkSpecifier.Builder();
       builder.setSsid(ssid);
       builder.setWpa2Passphrase(password);

       WifiNetworkSpecifier wifiNetworkSpecifier = builder.build();

       NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder();
       networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
       networkRequestBuilder.setNetworkSpecifier(wifiNetworkSpecifier);

       NetworkRequest networkRequest = networkRequestBuilder.build();
       cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

       networkCallback = new ConnectivityManager.NetworkCallback(){
           @Override
           public void onAvailable(@NonNull Network network) {
               super.onAvailable(network);
               Log.d(TAG, "onAvailable: "+network);
               cm.bindProcessToNetwork(network);
           }
       };
       cm.requestNetwork(networkRequest, networkCallback);
   }

并在清单中添加以下权限。

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

但直到现在我得到以下错误。

Caused by: java.lang.SecurityException: com.a.wifidemoproject was not granted  either of these permissions: android.permission.CHANGE_NETWORK_STATE, android.permission.WRITE_SETTINGS.
    at android.os.Parcel.createException(Parcel.java:2074)
    at android.os.Parcel.readException(Parcel.java:2042)
    at android.os.Parcel.readException(Parcel.java:1990)
    at android.net.IConnectivityManager$Stub$Proxy.requestNetwork(IConnectivityManager.java:3494)
    at android.net.ConnectivityManager.sendRequestForNetwork(ConnectivityManager.java:3562)
    at android.net.ConnectivityManager.requestNetwork(ConnectivityManager.java:3594)
    at android.net.ConnectivityManager.requestNetwork(ConnectivityManager.java:3670)
    at android.net.ConnectivityManager.requestNetwork(ConnectivityManager.java:3631)

怎么给android.permission.CHANGE_NETWORK_STATE, android.permission.WRITE_SETTINGS。如何解决这个问题,并在 Android Q 中成功连接到 wifi 网络。

标签: androidandroid-studioandroid-10.0

解决方案


只做异常所说的:在清单文件中声明权限,如下所示:

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

推荐阅读