我的应用程序在升级到Marshmallow后停止工作了,它原本应该能够更改WiFi连接,但现在根本没有任何反应。
我花了一些时间阅读Android 6.0的新权限模型。很棒,但旧应用程序应该继续工作...无论如何,我开始尝试实现授权,但意识到这是一个普通权限,如果在android清单中定义了它,则不需要进行权限请求:
在之前提到的AndroidManifest中,有一个CHANGE_WIFI_STATE权限,这个权限在运行于没有Android 6.0的设备上时就已经存在了。
我花了一些时间阅读Android 6.0的新权限模型。很棒,但旧应用程序应该继续工作...无论如何,我开始尝试实现授权,但意识到这是一个普通权限,如果在android清单中定义了它,则不需要进行权限请求:
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
权限一直在Android清单中,如果我理解正确,它应该可以工作,因为它是“普通权限”。那么为什么它不起作用,有没有人有解决方案?
以下是与我的情况相关的代码片段:
protected void connectWifi() {
if ((!connectedToAccessPoint(settings.getMainConnectionName()))
&& (accessPointIsAvailable(settings.getMainConnectionName()))) {
ConnectionUtils.connectToWifi(this,
settings.getMainConnectionName(),
settings.getMainConnectionPassword());
Toast.makeText(this,
"Connecting to " + settings.getMainConnectionName(),
Toast.LENGTH_LONG).show();
handler.postDelayed(sendUpdatesToUI,
DelayConstants.BASIC_REQUEST_SENT);
handler.postDelayed(sendUpdatesToUI,
DelayConstants.CHANGE_CONNECTION);
}
}
这里是与连接相关的技术部分:
public static void connectToWifi(Context context, String ssid, String password) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
// setup a wifi configuration
WifiConfiguration wc = new WifiConfiguration();
wc.SSID = "\"" + ssid + "\"";
wc.preSharedKey = "\""+ password + "\"";
wc.status = WifiConfiguration.Status.ENABLED;
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
// connect to and enable the connection
int netId = wifiManager.addNetwork(wc);
wifiManager.enableNetwork(netId, true);
wifiManager.setWifiEnabled(true);
}
在之前提到的AndroidManifest中,有一个CHANGE_WIFI_STATE权限,这个权限在运行于没有Android 6.0的设备上时就已经存在了。
WifiManager.getScanResults()
需要位置权限,对WifiConfiguration
的限制更改)。 - CommonsWare