美好的一天
简而言之,WifiManager.java是Google API针对Wifi相关功能提供的源模块。
其班级声明:
public class WifiManager {
显然包含许多功能,其中一些是我能够访问的,而不是它们不是私有功能
来自班级描述:
此课程提供用于管理Wi-Fi各个方面的主要API 连接。通过调用
获取此类的实例{@ link android.content.Context#getSystemService(String) Context.getSystemService(Context.WIFI_SERVICE)}。
这调用此获取此WiFi_Service上下文,转换为类型WiFiManager对象:
Context context = this;
WifiManager wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
并尝试使用所需的方法
来自WiFiManager
班级:
public static final int WIFI_FREQUENCY_BAND_5GHZ = 1;
因此,致电:
wifiManager.setFrequencyBand(1, true);
导致错误:
无法解析方法' setFrequencyBand(int,boolean)'
以下是我可以从WifiManager
类
public boolean setWifiEnabled(boolean enabled) {
try {
return mService.setWifiEnabled(enabled);
} catch (RemoteException e) {
return false;
}
}
但不是这个(其中还有更多):
public void setFrequencyBand(int band, boolean persist) {
try {
mService.setFrequencyBand(band, persist);
} catch (RemoteException e) { }
}
答案 0 :(得分:4)
查看WifiManager
类的源代码:
/**
* Set the operational frequency band.
* @param band One of
* {@link #WIFI_FREQUENCY_BAND_AUTO},
* {@link #WIFI_FREQUENCY_BAND_5GHZ},
* {@link #WIFI_FREQUENCY_BAND_2GHZ},
* @param persist {@code true} if this needs to be remembered
* @hide
*/
public void setFrequencyBand(int band, boolean persist) {
try {
mService.setFrequencyBand(band, persist);
} catch (RemoteException e) { }
}
此方法具有@hide
注释,这意味着它是隐藏API的一部分。
你不能直接打电话。
您可以使用反射或修改android.jar
来使用隐藏的API,但强烈建议不要这样做。他们被隐藏是有原因的。它们不能保证稳定,它们可以随时更改,您的应用程序可能会在将来的版本中轻松破解。
答案 1 :(得分:1)
看一下setFrequencyBand反射方法的源代码。
强烈劝阻。他们被隐藏是有原因的。它们不能保证稳定,它们可以随时更改,您的应用程序可能会在将来的版本中轻松破解。
/**
* Auto settings in the driver. The driver could choose to operate on both
* 2.4 GHz and 5 GHz or make a dynamic decision on selecting the band.
* @hide
*/
public static final int WIFI_FREQUENCY_BAND_AUTO = 0;
/**
* Operation on 5 GHz alone
* @hide
*/
public static final int WIFI_FREQUENCY_BAND_5GHZ = 1;
/**
* Operation on 2.4 GHz alone
* @hide
*/
public static final int WIFI_FREQUENCY_BAND_2GHZ = 2;
private void setFrequencyBand(WifiManager wm, int freq, boolean persist)
{
try
{
Class cls = Class.forName("android.net.wifi.WifiManager");
Method method = cls.getDeclaredMethod("setFrequencyBand", int.class, boolean.class);
method.invoke(wm, new Integer(freq), new Boolean(persist));
}
catch (Exception cnfe)
{
cnfe.printStackTrace();
}
}