Adb कमांड के माध्यम से (या बंद) USB जन संग्रहण को टॉगल करना


17

पृष्ठभूमि: मेरे पास एक यूएसबी स्टिक एंड्रॉइड डिवाइस है (उदाहरण के लिए RikoMagic) जो मैं ज्यादातर "हेडलेस" मोड में चलाता हूं। अन्य बातों के अलावा, मैंने पहले ही पता लगा लिया है कि इसे कैसे अदब और आंतरिक "एम" कमांड के संयोजन के माध्यम से बंद करना है:

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

मैं अब यह पता लगाने की कोशिश कर रहा हूं कि यूएसबी मास स्टोरेज सपोर्ट को कैसे चालू और बंद किया जाए। मुझे अब तक 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

मैं क्या गलत कर रहा हूं? एंड्रॉइड डिवाइस के आंतरिक भंडारण को माउंट / अनमाउंट करने के लिए क्या जादू भस्म है?

नोट 1: मुझे पता है कि स्पष्ट लिनक्स "माउंट" / "उमाउंट" कमांड है। हालाँकि, केवल वॉल्यूम बढ़ाना या अनमाउंट करना सिस्टम फ़ंक्शंस को ट्रिगर नहीं करेगा, उदाहरण के लिए, एसडी कार्ड में स्थानांतरित किए गए ऐप्स को पुनरारंभ करना या रोकना। एसडी कार्ड में एक ऐप अभी भी सक्रिय होने पर "umount" शायद वैसे भी विफल हो जाएगा।

नोट 2: जाहिर है कि एक "सेटपॉप" कमांड है जो USB रिबूट सपोर्ट को सक्षम कर सकता है / कर सकता है UNTIL को अगला रिबूट। फिर से, यह सब या कुछ भी नहीं है जो मैं देख रहा हूं, लेकिन एक एकल सत्र के दौरान यूएसबी मास स्टोरेज को चालू और बंद करने की क्षमता, जैसा कि टच इंटरफ़ेस द्वारा किया जा सकता है।

adb shell setprop sys.usb.config mass_storage

एक बहुत अच्छी तरह से शोध किया प्रश्न, काश मैं इसे दो बार बढ़ा सकता था! आपके प्रयासों के लिए धन्यवाद और उन सहायक और पहले से ही काम कर रहे कमांडों को साझा करना! अनुकरणीय :) उँगलियों को पार करके कोई व्यक्ति लापता टुकड़े के साथ आ सकता है, जैसा कि वास्तव में उपयोगी होगा!
इज़ी

जवाबों:


9

काश, UsbStorageActivityUSB मास स्टोरेज को सक्षम और अक्षम करने के इरादे का उपयोग नहीं करता है, इसलिए इसका उपयोग करने का कोई तरीका नहीं है am। यह बजाय कार्यों को बुलाता है StorageManager.enableUsbMassStorageऔर `StorageManager.disableUsbMassStorageअपना काम करता है। चूंकि ये फ़ंक्शन फ्रेमवर्क में छिपे हुए हैं, इसलिए ऐसा करने के लिए ऐप लिखना संभव नहीं है। जहाँ तक मुझे पता है, ऐसा करने के लिए कोई मौजूदा कमांड नहीं है।

ऐसा ऐप लिखना संभव हो सकता है जो एक कमांड-लाइन इंटरफ़ेस प्रदान करता है और MountServiceअपने setUsbMassStorageEnabledफ़ंक्शन को कॉल करने के लिए बाध्य सिस्टम सेवा का उपयोग करता है , लेकिन यह इस साइट के लिए रास्ता-विषय होगा।


1
लेकिन वास्तव में क्या होता है जब मैं "USB संग्रहण चालू करें" बटन पर टैप करता हूं? जब आप एक नया एप्लिकेशन लिखने के चरम पर जाते हैं तब भी इस बटन प्रेस के प्रभाव को प्राप्त करना संभव नहीं है? "बंदर" उपयोगिता का अधिक बुद्धिमान संस्करण चाल नहीं करेगा?
बेनामी हॉवर्ड

मैंने बताया कि मेरे उत्तर में: यह मेरे द्वारा बताए गए कार्यों को कहता है, जो बदले में सिस्टम सेवा में कॉल करता है, और सिस्टम सेवा सभी काम करता है। अधिक विवरण के लिए आपको स्रोत पढ़ना होगा। आप monkeyबटन को क्लिक करने के लिए भी उपयोग नहीं कर सकते हैं , क्योंकि कोड के लिए एक स्पष्ट जांच है, गलती से अनमाउंटिंग स्टोरेज को रोकने के लिए।
डान हुल्मे जुले

आप serviceCLI टूल आज़मा सकते हैं जो सिस्टम सर्विस मेथड को कॉल कर सकता है।
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);

अमीर ब्रांड- मैंने इस पद्धति का उपयोग करने की कोशिश की है लेकिन मैं अपने USB संग्रहण को अक्षम नहीं कर पा रहा हूं। क्या यह आपके साथ काम कर रहा है? यदि हाँ, तो क्या आप मेरी सहायता कर सकते हैं। धन्यवाद
खन्ना ०

हाय खन्ना ज़रूर। कोई दिक्कत नहीं है। कृपया मुझे समस्या के साथ netmir2002@gmail.com पर मेल भेजें और मैं समाधान खोजने की कोशिश करूंगा।
अमीर ब्रांड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.