Esiste un modo per sapere (pro grammaticamente) nella propria attività/applicazione che l'utente ha abilitato il tethering USB sul proprio telefono?Rileva tethering USB su Android
risposta
Guardare attraverso le Impostazioni. La documentazione del sistema punta alla risposta come no, non è possibile farlo.
è anche possibile utilizzare la reflection per accedere alla funzione nascosta per impostare tethering USB. Ecco il mio codice.
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!");
else
Log.d(TAG,"Enable usb tethering failed!");
Per disabilitare il tethering USB, è solo bisogno di cambiare le riflessione nome del metodo "getTetherableIfaces" a "getTetheredIfaces", il cambiamento "tether" a "untether".
Si prega di controllare.
non funziona in Android 4.0 –
Dovrebbe essere ovvio, ma questo è ovviamente un modo non standard di farlo, di cui uno sviluppatore dovrebbe essere a conoscenza, quindi lo dico comunque. –
non funziona su dispositivi Samsung – Neji
Ho scoperto che se controllo l'interfaccia di rete usb0 , ha solo un indirizzo IP una volta impostato il tethering.
public static String getIPAddressUsb(final boolean useIPv4) {
try {
final List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
for (final NetworkInterface intf : interfaces) {
if (intf.getDisplayName().startsWith("usb")) {
final List<InetAddress> addrs = Collections.list(intf.getInetAddresses());
for (final InetAddress addr : addrs) {
final String sAddr = addr.getHostAddress().toUpperCase();
final boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
if (useIPv4) {
if (isIPv4) { return sAddr; }
} else {
if (!isIPv4) {
final int delim = sAddr.indexOf('%');
return delim < 0 ? sAddr : sAddr.substring(0, delim);
}
}
}
}
}
} catch (final Exception ex) {
// for now eat exceptions
}
return "";
}
boolean isUsbTethered(){
String ipAddr = MipnAndroidApplication.getIPAddressUsb(true);
if (ipAddr.length() == 0) {
Log.i(LOG_TAG, "tethering not enabled");
return false;
} else {
Log.i(LOG_TAG, "tethering enabled :)");
return true;
}
}
Questo doent work. Anche dopo aver saputo di avere il tethering attivo e funzionante, ho ancora il messaggio "Tethering non abilitato" – javawocky
Ecco una soluzione per ascoltare i cambiamenti di stato tethering:
Per prima cosa è necessario avere familiarità con BroadcastReceiver. potete trovare un sacco di tutorial (Google: come ascoltare per le modifiche di connettività ...)
Al fine di ottenere l'aggiornamento dello stato Tethering, è necessario utilizzare un'azione di filtro nascosta di Android (vedi ConnectivityManager)
e nella classe BroadcastReceiver:
IntentFilter filter = new IntentFilter("android.net.conn.TETHER_STATE_CHANGED");
quindi registrare il filtro al BroadcastReceiver:
myApplicationContext.registerReceiver(this, filter);
sul tuo OnReceive (contesto contesto finale, intento Intent finale) il metodo, le informazioni Intent.extras contiene 3 matrici riempiti con la corrispondente interfaccia di rete tethered: erroredArray/availableArray/activeArray
E 'un po' difficile, ma si può ottenere le informazioni sullo stato del tethering.
Inoltre, si può fare qualche riflessione sulla funzione nascosta del codice di Android:
Cerca getTetherableIfaces()
nel Gestore di connettività.
Questo è il link: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/net/ConnectivityManager.java#L1604
Questo dovrebbe funzionare su tutti i telefoni, confermate su alcuni Android 7,6 e 5 dispositivi;
Metodo: l'interfaccia rndisX (in genere rndis0) viene visualizzata solo quando il tethering USB è abilitato.
Esempio di codice:
private static boolean isTetheringActive(Context context){
try{
for(Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();){
NetworkInterface intf=en.nextElement();
for(Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();){
InetAddress inetAddress=enumIpAddr.nextElement();
if(!intf.isLoopback()){
if(intf.getName().contains("rndis")){
return true;
}
}
}
}
}catch(Exception e){e.printStackTrace();}
return false;
}
- 1. Tethering inverso USB Android: come ingannare le app
- 2. opzione internet USB non disponibile kitkat - tethering inverso
- 3. Android: Rileva unità flash USB collegata
- 4. Avvia/interrompe il tethering Wi-Fi/USB integrato dal codice?
- 5. C# rileva dispositivo USB ClassCode (tipo di dispositivo USB)
- 6. supporto multicast su Android in modalità/Tethering tramite hotspot
- 7. USB non rileva in oracle virtualbox su mac OS
- 8. Connessione Android alla presa di tethering
- 9. inviare messaggi MIDI tramite USB su Android
- 10. Usa fotocamera USB su applicazione Android
- 11. android adb usb speed
- 12. Dispositivo HID USB Android
- 13. Android - abilita il tethering USB a livello di codice - c'è un'app che lo ha fatto per 2.3
- 14. Android: rilevamento di USB
- 15. Funzioni USB Android?
- 16. Rileva l'indirizzo IP wifi su Android?
- 17. Rileva evento precedente su tastiera Android
- 18. Rileva se il server ADB è in esecuzione su Android?
- 19. Abilita il tethering del bluetooth Android a livello di programmazione
- 20. Rileva quando è collegato un dispositivo USB in C
- 21. Scrittura driver USB per Android
- 22. Trasferimento dati USB isocrono Android
- 23. Autorun USB su mac
- 24. python su chiavetta USB
- 25. Rileva unità rimovibile (ad esempio unità flash USB) C/C++
- 26. Comunicazione USB con Android/Arduino
- 27. Modalità host Android Debugging USB
- 28. Windows 8 USB Driver Android
- 29. Abilita il debug USB su Android da remoto
- 30. Rilevamento quando un dispositivo USB è scollegato su Android
non è forse possibile anche da utilizzando java.lang.reflection?Ho raggiunto il controllo dello stato di Wifi Tethering usando quello ... ma per l'USB non riesco a capirlo. –