การเปิดหรือปิดที่เก็บข้อมูล USB ขนาดใหญ่ผ่านคำสั่ง adb


17

แบ็คกราวน์: ฉันมีอุปกรณ์ USB stick สำหรับ Android (เช่น 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: ฉันรู้ว่ามีคำสั่ง "mount" / "umount" ชัดเจนของ Linux อย่างไรก็ตามการติดตั้งหรือยกเลิกการต่อเชื่อมระดับเสียงจะไม่ทำให้ระบบทำงานได้อย่างมีความสำคัญตัวอย่างเช่นการรีสตาร์ทหรือหยุดแอพที่ย้ายไปยังการ์ด SD "umount" อาจจะล้มเหลวเมื่อแอพในการ์ด SD ยังคงทำงานอยู่

หมายเหตุ 2: เห็นได้ชัดว่ามีคำสั่ง "setprop" ที่สามารถเปิด / ปิดการใช้งานที่เก็บข้อมูล USB ได้จนกว่าจะรีบูตครั้งถัดไป อีกครั้งวิธีการทั้งหมดนี้หรือไม่มีอะไรไม่ใช่สิ่งที่ฉันกำลังมองหา แต่ความสามารถในการสลับเปิด / ปิดที่เก็บข้อมูล USB ขนาดใหญ่ในช่วงเซสชั่นเดียวซึ่งสามารถทำได้โดยอินเทอร์เฟซระบบสัมผัส

adb shell setprop sys.usb.config mass_storage

คำถามที่ได้รับการวิจัยเป็นอย่างดีหวังว่าฉันจะโหวตได้สองครั้ง! ขอบคุณสำหรับความพยายามของคุณและแบ่งปันคำสั่งที่เป็นประโยชน์และใช้งานได้แล้ว! แบบอย่าง :) การข้ามนิ้วของใครบางคนสามารถเกิดขึ้นกับชิ้นส่วนที่หายไปราวกับว่ามันจะมีประโยชน์แน่นอน!
Izzy

คำตอบ:


9

อนิจจาUsbStorageActivityไม่ได้ใช้ความตั้งใจในการเปิดใช้งานและปิดการใช้งานที่เก็บข้อมูล USB ดังนั้นจึงไม่มีวิธีที่จะทำให้การใช้งานamสำเร็จ มันเรียกฟังก์ชันStorageManager.enableUsbMassStorageและ`StorageManager.disableUsbMassStorageทำงานแทน เนื่องจากฟังก์ชั่นเหล่านี้ซ่อนอยู่ในกรอบจึงไม่สามารถเขียนแอพเพื่อทำสิ่งนี้ได้ เท่าที่ฉันรู้ไม่มีคำสั่งให้ทำเช่นนี้

อาจเป็นไปได้ที่จะเขียนแอพที่มีอินเตอร์เฟสบรรทัดคำสั่งและใช้บริการระบบที่ถูกผูกไว้MountServiceเพื่อเรียกใช้setUsbMassStorageEnabledฟังก์ชั่นของมันแต่นั่นอาจเป็นวิธีนอกหัวข้อสำหรับเว็บไซต์นี้


1
แต่จะเกิดอะไรขึ้นเมื่อฉันแตะที่ปุ่ม "เปิดที่เก็บข้อมูล USB" เหตุใดจึงเป็นไปไม่ได้ที่จะได้รับผลกระทบจากการกดปุ่มนี้แม้ว่าคุณจะเขียนแอพใหม่ทั้งหมด ชุดยูทิลิตี้ "ลิง" จะฉลาดกว่านี้หรือไม่?
Anonymous Howard

ฉันอธิบายว่าในคำตอบของฉัน: มันเรียกฟังก์ชั่นที่ฉันพูดถึงซึ่งจะเป็นการโทรเข้าสู่บริการของระบบและบริการของระบบจะทำงานทั้งหมด สำหรับรายละเอียดเพิ่มเติมคุณจะต้องอ่านแหล่งที่มา คุณไม่สามารถใช้monkeyเพื่อคลิกปุ่มได้เนื่องจากรหัสมีการตรวจสอบอย่างชัดเจนว่าจะหยุดการทดสอบเพื่อยกเลิกการต่อเชื่อมที่เก็บข้อมูลโดยไม่ตั้งใจ
Dan Hulme

คุณสามารถลองใช้serviceเครื่องมือ CLI ซึ่งสามารถเรียกวิธีการบริการของระบบ
Léo Lam

5


ฉันลอง "StorageManager.enableUsbMassStorage" และ "StorageManager.disableUsbMassStorage" เพื่อเปิดใช้งานและปิดใช้งานที่เก็บข้อมูลขนาดใหญ่และผลงานของมัน
ขอบคุณ

วิธีการนั้นเป็นวิธีส่วนตัว ดังนั้นถ้าคุณต้องการที่จะใช้พวกเขาคุณ shoud ทำได้โดยการสะท้อนกลับ ในการรับ Storage Manager นั้นคุณอาจใช้วิธี 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 ของฉันได้ มันทำงานกับคุณหรือเปล่า ถ้าเป็นเช่นนั้นคุณช่วยฉันออกได้ไหมขอบคุณ
คันนา

สวัสดีคันนาชัวร์ ไม่มีปัญหา. โปรดส่งอีเมลไปที่ netmir2002@gmail.com พร้อมปัญหาและฉันจะพยายามหาวิธีแก้ปัญหา
ยี่ห้อ Amir
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.