【发布时间】:2016-04-22 16:58:51
【问题描述】:
升级到 Marshmallow 后,我的应用程序停止工作,它应该能够更改 WiFi 连接,但现在它什么都不做。
我花了一些时间阅读有关 Android 6.0 的新权限模型。好棒,但旧应用程序应该继续工作......无论如何,我开始尝试实现权限授予,但意识到这是一个正常的权限,如果它在 android manifest 中定义,则不应对其进行任何权限请求:
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
该权限一直在 Android Manifest 中,如果我理解正确,它应该可以工作,因为它是“正常权限”。那么为什么它不起作用,有人有解决方案吗?
添加与我的案例相关的代码片段:
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 的设备上运行
【问题讨论】:
-
请提供minimal reproducible example。没有人可以帮助你处理看不见的代码。
-
@CommonsWare 对不起,我通常会这样做,但这次我不知道我还需要在这里发布什么?你到底需要什么代码?您还可以确认我正确理解了这个概念 - 我不会为此权限授予任何权限吗??
-
“我还需要在这里发布什么?” - 您可以发布“应该能够更改 WiFi 连接”的代码并确认“根本不做任何事情”的细节。 “我不应该为这个许可做任何许可吗?” -- 这是 Android 6.0 中的普通权限,因此您不需要为此做任何特别的事情。但是,其他事情发生了变化(例如,
WifiManager.getScanResults()需要位置权限,对WifiConfiguration的更改受限)。 -
万一后面的更改可能与您的代码有关,这里是发行说明:developer.android.com/about/versions/marshmallow/…
-
在安卓 6 中。您将获得 WiFi 状态的运行时权限..
标签: android permissions android-wifi android-6.0-marshmallow android-permissions