Да, есть способ использовать отражение. Работает на моем GSII (и не работает изящно на HTC Wifi без Wi-Fi Direct), но это отражение может работать не на всех телефонах.
p2pManager = (WifiP2pManager) getSystemService(WIFI_P2P_SERVICE);
channel = p2pManager.initialize(getApplicationContext(),
getMainLooper(), null);
try {
Class<?> wifiManager = Class
.forName("android.net.wifi.p2p.WifiP2pManager");
Method method = wifiManager
.getMethod(
"enableP2p",
new Class[] { android.net.wifi.p2p.WifiP2pManager.Channel.class });
method.invoke(p2pManager, channel);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Обратите внимание:
В Jelly Bean и выше, когда вы пытаетесь использовать API WifiP2pManager
, WiFi-Direct включается автоматически (до тех пор, пока включен WiFi), поэтому нет необходимости использовать этот хак.