¿Hay alguna forma de saber (pro gramaticalmente) en su Actividad/Aplicación que el usuario ha habilitado la conexión USB a su teléfono?Detectar conexión USB en Android
Respuesta
Mirando a través de los ajustes. La documentación del sistema apunta a que la respuesta es no, no es posible hacer esto.
también se puede utilizar la reflexión para acceder a la función oculta para establecer el anclaje de USB. Aquí está mi código.
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!");
Para deshabilitar el anclaje de USB, sólo tiene que cambiar los nombres de métodos de reflexión "getTetherableIfaces" a "getTetheredIfaces", cambie "cuerda" a "untether".
Por favor, verifique.
no funciona en Android 4.0 –
No hace falta decirlo, pero esta es, por supuesto, una forma no estándar de hacerlo, que un desarrollador debe tener en cuenta, así que simplemente lo digo de todos modos. –
no funciona en dispositivos samsung – Neji
He encontrado que si compruebo la interfaz de red usb0 , solo tiene una dirección IP una vez que se ha configurado el anclaje.
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;
}
}
Este doent trabajo. Incluso después de saber que me he conectado y sigo corriendo sigo recibiendo el mensaje "tethering not enabled" – javawocky
Aquí es una solución para escuchar los cambios de estado de la inmovilización:
primer lugar usted necesita estar familiarizado con BroadcastReceiver. se puede encontrar una gran cantidad de tutorial (Google: cómo escuchar los cambios de conectividad ...)
Con el fin de obtener la actualización de estado Tethering, es necesario utilizar una acción de filtro oculta de Android (ver ConnectivityManager)
y en su clase BroadcastReceiver:
IntentFilter filter = new IntentFilter("android.net.conn.TETHER_STATE_CHANGED");
luego registrar el filtro para su BroadcastReceiver:
myApplicationContext.registerReceiver(this, filter);
en su método OnReceive (contexto Contexto final, la intención Intención final), la información Intent.extras contiene 3 matrices llenas con el correspondiente interfaz de red atado: erroredArray/availableArray/activeArray
Es un poco complicado pero se puede conseguir la información de estado de tethering.
Además, se puede hacer un poco de reflexión sobre la función oculta del código de Android:
Buscar getTetherableIfaces()
en el Administrador de Conectividad.
Aquí hay un enlace: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/net/ConnectivityManager.java#L1604
Esto debería funcionar en todos los teléfonos, confirmados en algunos dispositivos Android 7,6 y 5;
Método: interfaz rndisX (normalmente rndis0) solo aparece cuando la conexión USB está habilitada.
Código Ejemplo:
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. Cómo detectar una conexión USB en linux/Qt
- 2. Android: Cómo detectar "Transmitir almacenamiento USB" ¿Transmisión?
- 3. Detectar USB insertado en Windows
- 4. Detectar unidad USB en Java
- 5. Habilitar/deshabilitar la conexión USB o WiFi programáticamente en Android
- 6. ¿Es posible detectar la depuración USB en dispositivos Android?
- 7. conexión USB de host a serie?
- 8. Conexión USB y depuración al mismo tiempo
- 9. Detección de conexión USB - C# .Net CF 3.5
- 10. Java detectar conexión perdida
- 11. Cámara web USB en Android
- 12. Dispositivo USB HID con Android
- 13. android adb usb speed
- 14. Android USB Host Communication
- 15. comunicación USB Android
- 16. ¿Funciones USB de Android?
- 17. Android: Detecta una unidad flash USB conectada
- 18. Android 2.1 Detectar conexión/desconexión de audio Bluetooth
- 19. Comunicación de cable de datos USB en Android
- 20. Detectar conexión de navegador cerrada en PHP
- 21. Escribir controlador USB para Android
- 22. Comunicación USB con Android/Arduino
- 23. HP TouchPad conducción USB en Android
- 24. Android: Comunicación USB Android <-> dispositivo externo
- 25. Desactivar programáticamente el almacenamiento USB en dispositivos Android
- 26. ¿Es posible compartir mi conexión a Internet de la PC a Android a través del usb?
- 27. Conexión de un teléfono Android con ADB
- 28. ¿Cómo cambiar el modo de conexión usb de Android solo para cargar?
- 29. Depuración de USB para Android con conexión a Internet para PC
- 30. Anclaje inverso USB de Android: Cómo engañar a las aplicaciones
¿No es posible, incluso por el uso de java.lang.reflection?Logré la verificación de estado de Wifi Tethering usando eso ... pero para USB no puedo entenderlo. –