2010-08-08 18 views

Répondre

0

Il n'y a aucune API publique dans le SDK Android pour gérer le partage de connexion - désolé!

3

J'ai répondu à cette question here. En bref, il est possible , voici le code:

private void setWifiTetheringEnabled(boolean enable) { 
    WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); 

    Method[] methods = wifiManager.getClass().getDeclaredMethods(); 
    for (Method method : methods) { 
     if (method.getName().equals("setWifiApEnabled")) { 
      try { 
       method.invoke(wifiManager, null, enable); 
      } catch (Exception ex) { 
      } 
      break; 
     } 
    } 
} 

Votre application devrait avoir la permission suivante:

android.permission.CHANGE_WIFI_STATE

+0

Cela fonctionne très bien .. Merci –

+0

Mais comment vérifier que le client est connecté avec le périphérique ou non? –

+0

J'aimerais aussi le savoir. Et pour désactiver le partage de connexion, appelez-vous la méthode 'setWifiApDisabled'? ou pouvez-vous utiliser 'method.invoke (wifiManager, null, disable);'? – SubliemeSiem

7

Il y a un non -Public Tethering API dans le ConnectivityManager. Comme indiqué ci-dessus, vous pouvez utiliser la réflexion pour y accéder. J'ai essayé ceci sur un certain nombre de téléphones Android 2.2, et cela fonctionne sur chacun d'entre eux (mon HTC allume le tethering mais ne le montre PAS dans la barre d'état ..., donc vérifiez de l'autre côté). Vous trouverez ci-dessous un code approximatif qui émet des informations de débogage et active le partage de connexion sur usb0.

ConnectivityManager cman = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 

Method[] methods = cman.getClass().getDeclaredMethods(); 
for (Method method : methods) { 
    if (method.getName().equals("getTetherableIfaces")) { 
     try { 
      String[] ifaces = (String[]) method.invoke(cman); 
      for (String iface : ifaces) { 
       Log.d("TETHER", "Tether available on " + iface); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    if (method.getName().equals("isTetheringSupported")) { 
     try { 
      boolean supported = (Boolean) method.invoke(cman); 
      Log.d("TETHER", "Tether is supported: " + (supported ? "yes" : "no")); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    if (method.getName().equals("tether")) { 
     Log.d("TETHER", "Starting tether usb0"); 
     try { 
      int result = (Integer) method.invoke(cman, "usb0"); 
      Log.d("TETHER", "Tether usb0 result: " + result); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

S'il vous plaît noter: ce code nécessite les autorisations suivantes pour:

android.permission.ACCESS_NETWORK_STATE 
android.permission.CHANGE_NETWORK_STATE 
0

J'ai utilisé le code de Android How to turn on hotspot in Android Programmatically! et j'active le hotspot portable pour android 4.2. Voici le code.

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
// TODO Auto-generated method stub 
WifiConfiguration wifi_configuration = null; 
wifiManager.setWifiEnabled(false); 

try 
{ 
    //USE REFLECTION TO GET METHOD "SetWifiAPEnabled" 
Method method=wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class); 
method.invoke(wifiManager, wifi_configuration, true); 
} 
catch (NoSuchMethodException e){ 
// TODO Auto-generated catch block 
    e.printStackTrace(); 
}catch (IllegalArgumentException e) { 
    // TODO Auto-generated catch block 
e.printStackTrace(); 
}catch (IllegalAccessException e) { 
    // TODO Auto-generated catch block 
e.printStackTrace(); 
}catch (InvocationTargetException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
}