如何在api 27(android 8.1)上获取wifi SSID?

如何在api 27(android 8.1)上获取wifi SSID?,android,Android,我想获得Android 8.1中已连接WiFi的名称。当我得到SSID时,它返回“未知SSID”。关于堆栈溢出的一些回答是获取位置权限。我甚至这样做了,但问题依然存在。但当我打开手机下拉菜单中的位置图标时(就像打开GPS或网络位置),它工作正常。但我认为在系统设置中打开定位太麻烦了。是否有任何方法可以在不手动打开位置的情况下获取ssid?或者我可以在我的应用程序中打开定位 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {

我想获得Android 8.1中已连接WiFi的名称。当我得到SSID时,它返回“未知SSID”。关于堆栈溢出的一些回答是获取位置权限。我甚至这样做了,但问题依然存在。但当我打开手机下拉菜单中的位置图标时(就像打开GPS或网络位置),它工作正常。但我认为在系统设置中打开定位太麻烦了。是否有任何方法可以在不手动打开位置的情况下获取ssid?或者我可以在我的应用程序中打开定位

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return getString(R.string.grant_location_permission_wifi_name)
    }
}

val wifiInfo = mWifiManager.connectionInfo.ssid

到目前为止,权限本身还不够,必须启用位置服务才能使用
WifiManager.getScanResults
WifiManager.getConnectionInfo

AOSP跟踪器中有一个关于这一点的问题,目前尚未修复。 实际上,您可以看到人们删除了开发人员关于修复tartgetSdk<23的此问题的帖子,但实际上并未修复此问题

参考:检查位置是否已启用:

public void enforceCanAccessScanResults(String pkgName, int uid) 
                                            throws SecurityException {
    ...
    // Location mode must be enabled
    if (!isLocationModeEnabled()) {
        // Location mode is disabled, scan results cannot be returned
        throw new SecurityException("Location mode is disabled for the device");
    }
    ...
}
它在
WifiManager
中调用:

作为最后一个选项,您可以尝试使用
ConnectivityManager
getActiveNetworkInfo

    val cm = ContextCompat.getSystemService(context, ConnectivityManager::class.java)

    val ssid: String? = cm?.activeNetworkInfo?.extraInfo

…问如何在奥利奥上获得它真的没有意义,因为什么都没有改变
ScanResult
是从API级别1开始提供的。@MartinZeitler我在我的API中添加了一些引用,一些API级别实际上存在此问题,因此OP没有错误谢谢,但是如何启用位置服务?我可以在我的代码中启用它吗?我知道tartgetSdk<23可以工作,但现在在Google Play Store中发布或更新应用程序需要targetSdk>=26它可以工作,我知道它可以工作。虽然这不是我想要的答案,但谢谢你给我关于这个问题的一些信息。事实上,有一个名为“EZVIZ”的应用程序,它不需要手动打开位置服务,只需要授予位置权限,然后它就得到了正确的WIFISSID,我不知道他们是如何做到的。所以我在这里发帖寻求帮助。谢谢。你最后发布的不是传统的方式,因为android 8.1中的一些设备是可以的,但android 9.0不可以。非常感谢你。
Intent gpsOptionsIntent = new Intent(  
    android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);  
startActivity(gpsOptionsIntent);
    val cm = ContextCompat.getSystemService(context, ConnectivityManager::class.java)

    val ssid: String? = cm?.activeNetworkInfo?.extraInfo