gpt4 book ai didi

android - WifiManager startScan 已弃用。选择?

转载 作者:行者123 更新时间:2023-12-03 09:39:53 29 4
gpt4 key购买 nike

我需要扫描所有可用的 wifi 网络,但“wifiManager.startScan()”方法已被弃用,我找不到替代方法。

有人知道真正的替代品吗?

我试图在开发人员 Android 门户中查找更多信息,但是它没有提供任何替代方案,或者至少我找不到它们。

我已经检查过:

  • https://developer.android.com/reference/android/net/wifi/WifiManager.html#startScan%28%29
  • https://developer.android.com/guide/topics/connectivity/wifi-scan#java

  • 我只需要一个可用网络列表以及我们可以使用“wifiManager.startScan()”获得的信息。

    你给我推荐什么?

    最佳答案

    它被标记为已弃用,并带有描述:“应用程序触发扫描请求的能力将在 future 的版本中删除。”
    目前这种方法有一些限制。事实上,如果你仔细看看 Wi-Fi scanning overview restrictions
    你可以看到你可以通过满足中解释的条件来实现你的目标。限制 .

    还有一件事,如果您正在开发一个系统特权应用程序,或者想知道即使关闭位置服务,这些应用程序如何获得 wifi 列表,他们使用 android.Manifest.permission.NETWORK_SETUP_WIZARDandroid.Manifest.permission.NETWORK_SETTINGS这是系统|签名级别的权限。阅读 WifiPermissionsUtil.java :

    /**
    * API to determine if the caller has permissions to get scan results. Throws SecurityException
    * if the caller has no permission.
    * @param pkgName package name of the application requesting access
    * @param uid The uid of the package
    */
    public void enforceCanAccessScanResults(String pkgName, int uid) throws SecurityException {
    mAppOps.checkPackage(uid, pkgName);

    // Apps with NETWORK_SETTINGS & NETWORK_SETUP_WIZARD are granted a bypass.
    if (checkNetworkSettingsPermission(uid) || checkNetworkSetupWizardPermission(uid)) {
    return;
    }

    // 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");
    }

    // Check if the calling Uid has CAN_READ_PEER_MAC_ADDRESS permission.
    boolean canCallingUidAccessLocation = checkCallerHasPeersMacAddressPermission(uid);
    // LocationAccess by App: caller must have
    // Coarse Location permission to have access to location information.
    boolean canAppPackageUseLocation = checkCallersLocationPermission(pkgName, uid);

    // If neither caller or app has location access, there is no need to check
    // any other permissions. Deny access to scan results.
    if (!canCallingUidAccessLocation && !canAppPackageUseLocation) {
    throw new SecurityException("UID " + uid + " has no location permission");
    }
    // Check if Wifi Scan request is an operation allowed for this App.
    if (!isScanAllowedbyApps(pkgName, uid)) {
    throw new SecurityException("UID " + uid + " has no wifi scan permission");
    }
    // If the User or profile is current, permission is granted
    // Otherwise, uid must have INTERACT_ACROSS_USERS_FULL permission.
    if (!isCurrentProfile(uid) && !checkInteractAcrossUsersFull(uid)) {
    throw new SecurityException("UID " + uid + " profile not permitted");
    }
    }

    关于android - WifiManager startScan 已弃用。选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56401057/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com