android - 如何在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 网络。
解决方案
只做异常所说的:在清单文件中声明权限,如下所示:
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
推荐阅读
- excel - 在 Excel 中使用 for 循环创建工作表时出错
- java - POST (HTTP) + Java:如何发送特定的表单数据?
- java - 如何从这两个数组中生成一串固定数量的数字?
- java - log4j2 滚动文件附加程序
- dart - 使用 FutureBuilder 创建轮播
- linux - rsync:包含和排除
- javascript - 在 cURL 中传递编码的链接
- image - 高效的livewire算法
- javascript - 承诺所有并使用 React.js 正确更新状态
- javascript - Material UI - React Router - 带有 ID 的 BreadCrumbs