adb 명령을 통해 USB 대용량 저장소 켜기 또는 끄기


17

배경 : USB 헤드 안드로이드 기기 (예 : RikoMagic)가 있는데, 대부분 "헤드리스"모드로 실행됩니다. 무엇보다도, 나는 이미 adb와 내부 "am"명령의 조합을 통해 시스템을 종료하는 방법을 알아 냈습니다.

adb shell am start -n android/com.android.server.ShutdownActivity

이제 USB 대용량 저장소 지원을 켜고 끄는 방법을 알아 내려고 노력 중입니다. 다음 명령을 통해 USB 저장 장치 활동 창이 팝업되도록했습니다.

adb shell am start -n com.android.systemui/.usb.UsbStorageActivity

불행히도 공유 볼륨을 실제로 "마운트 해제"하거나 "공유 해제"하기 위해 동등한 "의도"를 보내는 방법을 알 수 없었습니다. 다음 명령은 아무 것도 수행하지 않습니다.

adb shell am start -n com.android.systemui/.usb.UsbStorageActivity -a android.intent.action.MEDIA_UNSHARED file:///mnt/sdcard

내가 도대체 ​​뭘 잘못하고있는 겁니까? Android 기기의 내부 저장소를 마운트 / 마운트 해제하는 마법의 주문은 무엇입니까?

참고 1 : Linux "mount"/ "umount"명령이 있다는 것을 알고 있습니다. 그러나 단순히 볼륨을 마운트하거나 마운트 해제해도 SD 카드로 이동 한 앱을 다시 시작하거나 중지하는 데 필수적인 시스템 기능은 트리거하지 않습니다. SD 카드의 앱이 여전히 활성화되어 있으면 "umount"가 실패 할 수 있습니다.

참고 2 : 다음 번에 재부팅 할 때까지 USB 대용량 저장소 지원을 활성화 / 비활성화 할 수있는 "setprop"명령이 있습니다. 다시 말하지만,이 모든 접근 방법은 내가 찾고있는 것이 아니라 터치 인터페이스로 수행 할 수있는 것처럼 단일 세션 동안 USB 대용량 저장 장치를 켜고 끄는 기능입니다.

adb shell setprop sys.usb.config mass_storage

매우 잘 연구 된 질문입니다. 두 번 투표 할 수 있으면 좋겠습니다. 귀하의 노력과 도움이되고 이미 작동하는 명령을 공유해 주셔서 감사합니다! 예시 :) 손가락을 가로 질러 누군가가 잃어버린 조각을 생각해 낼 수 있습니다. 실제로 유용 할 것입니다!
Izzy

답변:


9

아아, UsbStorageActivityUSB 대용량 저장 장치를 활성화 및 비활성화하기위한 의도를 사용하지 않으므로을 사용하여이를 달성 할 수있는 방법이 없습니다 am. 그것은 대신 함수를 호출 StorageManager.enableUsbMassStorage하고 `StorageManager.disableUsbMassStorage작업을 할 수 있습니다. 이러한 함수는 프레임 워크에 숨겨져 있으므로이를 수행하는 앱을 작성할 수도 없습니다. 내가 아는 한, 기존 명령은 없습니다.

명령 행 인터페이스를 제공하고 바운드 시스템 서비스 MountService를 사용하여 setUsbMassStorageEnabled기능 을 호출 하는 앱을 작성할 수 있지만이 사이트에서는 주제가 맞지 않습니다.


1
"USB 저장 장치 켜기"버튼을 탭하면 정확히 어떻게됩니까? 완전히 새로운 앱을 작성하는 중에도이 버튼 누름의 효과를 얻을 수없는 이유는 무엇입니까? "monkey"유틸리티의보다 지능적인 변형이 트릭을 수행하지 않습니까?
익명 하워드

나는 대답에서 내가 언급 한 기능을 호출하고 차례로 시스템 서비스를 호출하고 시스템 서비스가 모든 작업을 수행한다고 설명했습니다. 자세한 내용은 소스를 읽어야합니다. monkey코드에서 명시 적으로 검사 했으므로 실수로 스토리지 마운트를 해제하는 테스트를 중지하기 위해 버튼을 클릭하여 사용할 수도 없습니다 .
Dan Hulme

service시스템 서비스 메소드를 호출 할 수 있는 CLI 도구를 시도 할 수 있습니다.
Léo Lam

5


"StorageManager.enableUsbMassStorage"및 "StorageManager.disableUsbMassStorage"를 사용하여 대용량 저장소 및 해당 작업을 활성화 및 비활성화했습니다.
감사.

그 방법은 개인 방법입니다. 그래서, 당신이 그것들을 사용하고 싶다면, 당신은 그것을 반영하여 그것을해야합니다. 해당 스토리지 관리자를 가져 오려면 활동에 포함 된 getSystemService (java.lang.String) 메소드를 사용할 수 있습니다.

 StorageManager storage = (StorageManager)getApplicationContext().getSystemService(STORAGE_SERVICE);
 Method method = storage.getClass().getDeclaredMethod("enableUsbMassStorage");
 method.setAccessible(true); 
 Object r = method.invoke(storage);

그리고 대량 저장을 방해하려면 :

StorageManager storage = (StorageManager) getApplicationContext().getSystemService(STORAGE_SERVICE);
Method method = storage.getClass().getDeclaredMethod("disbleUsbMassStorage");
method.setAccessible(true);
Object r = method.invoke(storage);

Amir Brand-이 방법을 사용하려고했지만 USB 저장 장치를 비활성화 할 수 없습니다. 당신과 함께 일하고 있습니까? 그렇다면, 도와주세요. 감사합니다
Khanna

칸나 안녕하세요. 문제 없어요. 문제가있는 경우 netmir2002@gmail.com으로 메일을 보내 주시면 해결책을 찾도록 노력하겠습니다.
Amir Brand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.