Commencer / arrêter le Wi-Fi intégré / USB tethering from code?

Comment puis-je démarrer ou arrêter le tethering intégré dans Android 2.2 à partir de mon application?

  • La version du serveur ADB (36) ne correspond pas à ce client (39) {Ne pas utiliser Genymotion}
  • Android GCM: mode de manutention différent selon si l'application est visible ou non
  • Convertir le flux d'entrée vidéo en RTMP
  • WebView Double Tap zoom ne fonctionne pas sur un Motorola Droid A855
  • Notification Android Push sans utiliser GCM
  • Style personnalisé pour la barre d'action empilée?
  • OnSaveInstanceState n'est pas appelé après la rotation de l'écran
  • Pourquoi il lance parfois FileNotFoundException
  • OnCreate flow continue après la fin ()
  • Les éléments en Fragment ne fonctionnent pas après la ré-ajout du même fragment
  • Exception aléatoire android.database.sqlite.SQLiteException: impossible d'ouvrir le fichier de base de données
  • La notification d'usure Android n'est pas affichée si FLAG_NO_CLEAR est utilisé
  • 4 Solutions collect form web for “Commencer / arrêter le Wi-Fi intégré / USB tethering from code?”

    Il existe une API Tethering non publique dans ConnectivityManager . Comme indiqué ci-dessus, vous pouvez utiliser la réflexion pour y accéder. J'ai essayé cela sur un certain nombre de téléphones Android 2.2, et cela fonctionne sur tous (mon HTC active le tethering, mais PAS le montre dans la barre d'état …, alors vérifiez de l'autre côté). Voici un code approximatif qui émet des problèmes de débogage et active la 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(); } } } 

    Remarque: ce code requiert les autorisations suivantes pour fonctionner:

     android.permission.ACCESS_NETWORK_STATE android.permission.CHANGE_NETWORK_STATE 

    J'ai répondu à cette question ici . 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

    Il n'y a pas d'API publique dans le SDK Android pour gérer le tethering – désolé!

    J'ai utilisé le code d' Android Comment allumer le point chaud dans Android par programme ! Et j'active le point d'accès portatif 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(); } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.