前言
项目中有许多以前调用的API,Android studio提示已经过时,所以打算把过时的API替换掉,但是新的API是@hide的,需要反射来调用,于是便重温了一下反射机制。先上例子:wifi遗忘功能以前的实现方式是:
mWifiManager.removeNetwork(config.get(i).networkId);
mWifiManager.saveConfiguration();
但是新的实现方法是forget方法,由于forget方法是隐藏方法,所以利用反射机制调用:
public static void forgetNetwork(WifiManager manager, int networkId) {
if (manager == null) {
return;
}
try {
//如果不传入WiFimanager,我们可以利用Class类来获取
// Class wifiManagerClass = WifiManager.class;
//Method forget = wifiManagerClass.getDeclaredMethod("forget", int.class, Class.forName("android.net.wifi.WifiManager$ActionListener"));
Method forget = manager.getClass().getDeclaredMethod("forget", int.class, Class.forName("android.net.wifi.WifiManager$ActionListener"));
if (forget != null) {
forget.setAccessible(true);
forget.invoke(manager, networkId, null);
//forget.invoke(wifiManagerClass.newInstance(), networkId, null);
}
} catch (Exception e) {
e.printStackTrace();
}
}
Android反射机制调用API步骤
Android反射机制调用API有三个步骤:
1.获取Class对象
lass wifiManagerClass = WifiManager.class;
2.获取方法
Method forget = wifiManagerClass.getDeclaredMethod("forget", int.class, Class.forName("android.net.wifi.WifiManager$ActionListener"));
3.方法调用