Quel est l'appel de l'API que j'ai besoin de faire dans Android 2.2 (Froyo) pour créer un point d'accès Wifi (comme on le voit dans l'élément de paramètres Tethering et Portable Hotspot).Android 2.2 hotspot wifi API
Répondre
Vous pouvez appeler
private boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled);
utilisant la réflexion :)
après avoir obtenu l'WifiManager
utiliser la réflexion pour obtenir les WifiManager
méthodes déclarées, recherchez ce nom de la méthode setWifiApEnabled
et l'appeler à travers le WifiManager
Ces API sont marquées comme @hide, donc vous ne pouvez pas les utiliser directement, mais elles apparaissent o n l'AIDL pour le WifiManager afin qu'ils soient accessibles!
Un exemple peut être:
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
Method[] wmMethods = wifi.getClass().getDeclaredMethods();
for(Method method: wmMethods){
if(method.getName().equals("setWifiApEnabled")){
WifiConfiguration netConfig = new WifiConfiguration();
netConfig.SSID = "\"PROVAAP\"";
netConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
try {
method.invoke(wifi, netConfig,true);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
Il fonctionne, mais je ne peux pas changer la configuration actuelle avec mon propre, et d'obtenir le WifiConfiguration actuel d'un AP actif me conduire à un configuration.Why vide?
bonne enquête – Schildmeijer
Vous pouvez toujours y accéder par la réflexion! –
@ markov00: Votre approche suggérée ne fait pas partie du SDK Android. Ne l'utilisez pas, période. – CommonsWare
Il ne semble pas y avoir d'appel API pour créer un hotspot WiFi - désolé!
cela fonctionne sur API 8 et au-dessus. J'utilise une version très différente de celle ci-dessous (ou ci-dessus), et courait dans le même problème rencontré markov00; ne pas être en mesure de charger la configuration Wifi par défaut pour le point d'accès Wi-Fi portable. J'ai trouvé une solution ailleurs.
Si vous aimez la solution, ce serait bien si cela a été accepté comme une réponse
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
Method[] wmMethods = wifi.getClass().getDeclaredMethods();
for (Method method: wmMethods){
if (method.getName().equals("setWifiApEnabled")){
try {
// just nullify WifiConfiguration to load the default configuration ;)
method.invoke(wifi, null, true);
} catch (IllegalArgumentException e){
e.printStackTrace();
} catch (IllegalAccessException e){
e.printStackTrace();
} catch (InvocationTargetException e){
e.printStackTrace();
}
}
}
Donc, après avoir annulé celui en cours, il accepte votre WifiConfig? – bk138
non, mais il utilise simplement la valeur par défaut, déjà défini un – slinden77
@dmmh, est-il vrai en ajoutant "method.invoke (wifi, null, true);" c'est activé. et donc je change juste les valeurs booléennes en "faux" pour l'éteindre? Qu'en est-il de vérifier son état actuel, qu'il soit allumé/éteint? – gumuruh
Je ne peux toujours pas croire qu'il n'y a pas API pour activer/désactiver tethering. Espérons que cela existe, mais n'est pas encore documenté. – Sney
Il est documenté: http://www.androidjavadoc.com/2.3/android/net/wifi/WifiManager.html Ne fait pas partie de l'API officielle. –