Car*_*ela 7 android deprecated wifimanager
我需要扫描所有可用的 wifi 网络,但不推荐使用“wifiManager.startScan()”方法,我找不到替代方法。
有谁知道真正的替代品?
我试图在开发人员 Android 门户中查找更多信息,但是,它没有提供任何替代方案,或者至少我找不到它们。
我已经检查过:
我只需要可用网络的列表以及我们可以使用“wifiManager.startScan()”获得的信息。
你给我推荐什么?
它被标记为已弃用,并带有描述:“应用程序触发扫描请求的功能将在未来版本中删除。” 目前,此方法有一些限制。事实上,如果您仔细查看Wi-Fi 扫描概述限制,您会发现通过满足限制 中说明的条件即可实现您的目标。
另一件事,如果您正在开发一个系统特权应用程序,或者想知道这些应用程序如何在关闭位置服务的情况下获取 wifi 列表,它们会使用android.Manifest.permission.NETWORK_SETUP_WIZARD或android.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");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1680 次 |
| 最近记录: |