Est-il un moyen de savoir (pro grammaticalement) dans votre Activité/de l'Application que l'utilisateur a activé le partage de connexion USB sur son téléphone?
Il n'est pas possible, même à l'aide de java.lang.la réflexion? J'ai obtenu le contrôle de l'état de Wifi Tethering l'aide...mais pour l'USB je ne peux pas le comprendre.
vous pouvez également utiliser la réflexion pour accéder à la fonction cachée pour le réglage de partage de connexion usb.
Voici mon code.
ConnectivityManager cm =(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);Log.d(TAG,"test enable usb tethering");String[] available =null;int code=-1;Method[] wmMethods = cm.getClass().getDeclaredMethods();for(Method method: wmMethods){if(method.getName().equals("getTetherableIfaces")){try{
available =(String[]) method.invoke(cm);break;}catch(IllegalArgumentException e){//TODO Auto-generated catch block
e.printStackTrace();return;}catch(IllegalAccessException e){//TODO Auto-generated catch block
e.printStackTrace();return;}catch(InvocationTargetException e){//TODO Auto-generated catch block
e.printStackTrace();return;}}}for(Method method: wmMethods){if(method.getName().equals("tether")){try{
code =(Integer) method.invoke(cm, available[0]);}catch(IllegalArgumentException e){//TODO Auto-generated catch block
e.printStackTrace();return;}catch(IllegalAccessException e){//TODO Auto-generated catch block
e.printStackTrace();return;}catch(InvocationTargetException e){//TODO Auto-generated catch block
e.printStackTrace();return;}break;}}if(code==0)Log.d(TAG,"Enable usb tethering successfully!");elseLog.d(TAG,"Enable usb tethering failed!");
Pour la désactivation du partage de connexion usb, il vous suffit de changer la méthode de réflexion le nom "getTetherableIfaces" à "getTetheredIfaces", changer "d'attache" à "détacher".
Veuillez vérifier.
sa ne fonctionne pas sous Android 4.0 Il devrait aller sans dire, mais c'est bien sûr un non standard façon de faire, un développeur doit connaître, donc je viens de dire de toute façon. ne fonctionne pas sur les appareils samsung J'ai essayé votre code et de le mettre en mode tethering. Cependant, l'appareil n'était pas VRAIMENT en mode tethering, il ne montrait que le "tethering ou hotspot est activé" notifiaction (avec une insolite drôle de cercle avec un point au milieu de l'icône), et le partage de connexion paramètres a dit hotspot a été activée, mais que le commutateur est réglé sur off. Ne pas vérifier un hotspot parce que ce n'était pas ce que je voulais (je voulais USB). Cependant, la MAUVAISE chose est sur chaque exécution de l'application (même après redémarrage), il n'a montré aucun captif, tetherable, ou les interfaces! J'ai peut-être recharger ce à partir de zéro. Mon appareil est un AT&T Samsung Galaxy Note SGH-I717 de course de stock 4.1.2
Voici une solution à Écouter pour attacher les changements d'état :
Abord, vous devez être familier avec BroadcastReceiver.
vous pouvez trouver beaucoup de tutoriel (google : comment écouter pour les modifications de connectivité ...)
Afin d'obtenir le partage de connexion de l'état de mise à jour, vous devez utiliser un caché action de filtrage d'Android (voir ConnectivityManager)
sur votre onReceive(finale contexte Contexte,de l'Intention de l'intention), la méthode d'Intention.les extras de l'information contient 3 tableaux remplis avec le correspondant captif interface réseau :
erroredArray /availableArray /activeArray
C'est un peu délicat, mais vous pouvez obtenir le partage de connexion des informations d'état.
En outre, vous pouvez faire une réflexion sur la fonction cachée de code Android :
De recherche pour getTetherableIfaces() dans le Gestionnaire de Connectivité.
Notez que, à partir de Android 8 de l'API (niveau 26), le EXTRA_ACTIVE_TETHER valeur est "tetherArray" au lieu de "activeArray" (récupération de la reçu extras dans le onReceive() de la BroadcastReceiver renvoie null tableau de chaînes pour "activeArray" clé)
Regarder à travers les Paramètres.La documentation du système de points pour la réponse étant non, il n'est pas possible de le faire.
Lien vers cette documentation
OriginalL'auteur Michal
vous pouvez également utiliser la réflexion pour accéder à la fonction cachée pour le réglage de partage de connexion usb.
Voici mon code.
Pour la désactivation du partage de connexion usb, il vous suffit de changer la méthode de réflexion le nom "getTetherableIfaces" à "getTetheredIfaces", changer "d'attache" à "détacher".
Veuillez vérifier.
Il devrait aller sans dire, mais c'est bien sûr un non standard façon de faire, un développeur doit connaître, donc je viens de dire de toute façon.
ne fonctionne pas sur les appareils samsung
J'ai essayé votre code et de le mettre en mode tethering. Cependant, l'appareil n'était pas VRAIMENT en mode tethering, il ne montrait que le "tethering ou hotspot est activé" notifiaction (avec une insolite drôle de cercle avec un point au milieu de l'icône), et le partage de connexion paramètres a dit hotspot a été activée, mais que le commutateur est réglé sur off. Ne pas vérifier un hotspot parce que ce n'était pas ce que je voulais (je voulais USB). Cependant, la MAUVAISE chose est sur chaque exécution de l'application (même après redémarrage), il n'a montré aucun captif, tetherable, ou les interfaces! J'ai peut-être recharger ce à partir de zéro.
Mon appareil est un AT&T Samsung Galaxy Note SGH-I717 de course de stock 4.1.2
OriginalL'auteur byndhorizon
Voici une solution à Écouter pour attacher les changements d'état :
Abord, vous devez être familier avec BroadcastReceiver.
vous pouvez trouver beaucoup de tutoriel (google : comment écouter pour les modifications de connectivité ...)
Afin d'obtenir le partage de connexion de l'état de mise à jour, vous devez utiliser un caché action de filtrage d'Android (voir ConnectivityManager)
et dans votre BroadcastReceiver classe :
puis enregistrer le filtre de votre BroadcastReceiver :
sur votre onReceive(finale contexte Contexte,de l'Intention de l'intention), la méthode d'Intention.les extras de l'information contient 3 tableaux remplis avec le correspondant captif interface réseau :
erroredArray /availableArray /activeArray
C'est un peu délicat, mais vous pouvez obtenir le partage de connexion des informations d'état.
En outre, vous pouvez faire une réflexion sur la fonction cachée de code Android :
De recherche pour
getTetherableIfaces()
dans le Gestionnaire de Connectivité.Voici un lien : https://github.com/android/platform_frameworks_base/blob/master/core/java/android/net/ConnectivityManager.java#L1604
EXTRA_ACTIVE_TETHER
valeur est "tetherArray" au lieu de "activeArray" (récupération de la reçu extras dans leonReceive()
de laBroadcastReceiver
renvoie null tableau de chaînes pour "activeArray" clé)OriginalL'auteur Tobliug
Cela doit fonctionner sur tous les téléphones, a confirmé sur certains Android 7,6 et 5 appareils;
Exemple De Code:
OriginalL'auteur Constantin Marcel
J'ai trouvé que si je check pour usb0 interface réseau
il ne dispose que d'une adresse ip une fois tethering a été mis en place.
OriginalL'auteur Andy Aspell-Clark