无法在WifiManager类中解析公共方法setFrequencyBand

时间:2016-06-09 16:36:14

标签: java android wifi wifimanager

美好的一天

简而言之,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) { }
    }

2 个答案:

答案 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();
    }
}