2011-09-13 31 views
13

En muchos dispositivos Android, cuando el dispositivo está conectado al puerto USB de una computadora o incluso a algunos dispositivos de carga USB, el teléfono entra en modo de almacenamiento USB. Cuando el dispositivo está en este modo, las aplicaciones de Android no pueden acceder a la tarjeta SD. ¿Hay alguna forma (1) de detectar cuándo el dispositivo está en este modo y (2) desactivar programáticamente el almacenamiento USB, al menos temporalmente, para que mi aplicación Android pueda acceder a la tarjeta SD?Desactivar programáticamente el almacenamiento USB en dispositivos Android

He visto otras preguntas de SO y las respuestas no son realmente suficientes (por ejemplo, Android: Detecting USB).

+0

+1 para la buena pregunta –

+0

Esto puede funcionar si el teléfono está rooteado y el sistema operativo actual tiene el permiso de acceso API requerido – Prateek

+0

Como dijo Nikolay a continuación, a menos que solo -Honeycomb dispositivos, no vale la pena el esfuerzo para hacer una función de alternar UMS. MTP, aunque a muchos no les guste (incluido yo mismo), tiene sus puntos buenos. Por ejemplo, con MTP puede eliminar simultáneamente archivos de su teléfono a través de su computadora o desde su dispositivo y ver los cambios reflejados inmediatamente en su computadora y dispositivo. Con UMS, debe montar/desmontar cada vez que necesite cambiar el uso entre su dispositivo y su computadora. Entonces MTP te ofrece más flexibilidad. – ChuongPham

Respuesta

3

Puede detectarlo (tiene el enlace), pero, AFAIK, no puede montar/desmontar el almacenamiento USB al menos no con las API SDK públicas. En Honeycomb (3.0 y superior), el almacenamiento masivo USB ya no se utiliza para acceder al almacenamiento externo del dispositivo, por lo que su aplicación y una computadora pueden acceder a él simultáneamente.

+1

Correcto, no puede montar o desmontar el USB, a menos que su aplicación sea parte del firmware. – CommonsWare

5

A1: Si el estado actual de la tarjeta SD es compartida significa que se ha conectado al PC en modo MSC, se puede comprobar este caso de la siguiente manera:

String state = Environment.getExternalStorageState(); 
if (Environment.MEDIA_SHARED.equals(state)) { 
    // Sd card has connected to PC in MSC mode 
} 

A2: Se puede forzar para que se apague USB la conexión de almacenamiento masivo, llamando al:

MountService.setUsbMassStorageEnabled(false); 

o

StorageManager.disableUsbMassStorage(); 

pero, por desgracia, tanto estas API no son accesibles al público ?!

+6

Entonces, ¿cómo acceder a esas API? –

0

Bloquea el almacenamiento masivo mediante el uso de la reflexión en storageManger api. La aplicación Storage Manager está disponible desde el nivel sdk -9.

No puedo reflejar la API Mountservice que puede apuntar a menos nivel de os. Si alguien lo ha hecho por favor brinde sugerencias

+0

Bienvenido a Stack Exchange. No debe agregar comentarios o preguntas como respuesta; lo más probable es que sean eliminados. Si tiene alguna pregunta, consulte primero, pero asegúrese de leer [Cómo preguntar] (http://stackoverflow.com/questions/how-to-ask). Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación una vez que tenga suficiente [reputación] (http://stackoverflow.com/help/whats-reputation). La publicación eliminada puede tener consecuencias negativas [Ya no aceptamos preguntas/respuestas de esta cuenta] (http://meta.stackexchange.com/q/86997/201151) – bummi

Cuestiones relacionadas