2015-11-07 11 views
10

शीर्षक कहता है, मुझे यूएसबी सक्षम एंड्रॉइड फोन पर एक विशिष्ट यूएसबी डिवाइस की गणना करने में समस्याएं आ रही हैं UsbManager.getDeviceList() का उपयोग कर। मुझे इस और अन्य फोन पर अन्य यूएसबी उपकरणों के साथ गणना करने और संचार करने में कोई दिक्कत नहीं हुई है, लेकिन यह विशिष्ट यूएसबी डिवाइस नहीं मिला है। इसेजैसे तृतीय पक्ष ऐप्स के साथ भी समझा नहीं जा सकता है।यह विशिष्ट डिवाइस UsbManager.getDevicesList() द्वारा क्यों नहीं समझा जा सकता है?

नीचे पीसी पर उचित रूप से वर्णित यूएसबी गुण हैं। मैंने डिवाइस निर्माता के साथ संवाद किया है जिसने पुष्टि की है कि डिवाइस के प्रमाणित बाहरी फर्म ने यूएसबी 2.0 स्पेक का पालन किया है। मूल रूप से, मेरा संदेह यह था कि डिवाइस एंड्रॉइड द्वारा अस्वीकार कर दिया गया था क्योंकि यह निम्नलिखित फ़ील्ड को छोड़ दिया गया: iManufacturer, iProduct, और iSerialNumber, जो अन्य अनुपालन उपकरणों द्वारा शामिल किए गए थे। हालांकि, ऐसा लगता है इन क्षेत्रों USB 2.0 Spec की धारा 9.5 से इस अंश समीक्षा करने के बाद आवश्यक नहीं हैं:

जहां उपयुक्त हो, वर्णनकर्ता स्ट्रिंग वर्णनकर्ता कि मानव पठनीय रूप में एक वर्णनकर्ता का वर्णन प्रदर्शन योग्य जानकारी प्रदान करने के संदर्भ होते हैं। स्ट्रिंग डिस्क्रिप्टर को शामिल करना वैकल्पिक है। हालांकि, वर्णनकर्ताओं के भीतर संदर्भ फ़ील्ड अनिवार्य हैं। यदि कोई डिवाइस स्ट्रिंग डिस्क्रिप्टर का समर्थन नहीं करता है, तो कोई स्ट्रिंग डिस्क्रिप्टर उपलब्ध नहीं होने के लिए स्ट्रिंग संदर्भ फ़ील्ड को शून्य पर रीसेट किया जाना चाहिए।

मेरा प्रश्न, तो क्या यूएसबी डिवाइस की गणना को अस्वीकार करने के लिए UsbManager का कारण बन रहा है? और, सबसे महत्वपूर्ण बात यह है कि एंड्रॉइड को इस डिवाइस की गणना करने के लिए मजबूर करने के लिए मैं इसके बारे में कुछ भी कर सकता हूं? आदर्श रूप से, मुझे ऐसे समाधान में रूचि है जिसमें रूट पहुंच की आवश्यकता नहीं है, लेकिन यह एक सौदा-ब्रेकर नहीं है।

USB properties


संपादित करें: कुछ नमूना कोड।

UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); 
HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList(); 
// When I plug in this USB device, deviceList is empty. 
// Other devices are discoverable, however. 

संपादित करें 2: मैं कुछ और अधिक फोन के साथ परीक्षण किया है। मैं सफलतापूर्वक निम्नलिखित फोन के साथ USB डिवाइस प्रगणित है

  • नोट 2
  • एलजी- V400 के

निम्नलिखित उपकरणों डिवाइस की गणना नहीं कर सकता:

  • नेक्सस 5
  • गैलेक्सी एस 4, एस 5, एस 6
  • एलजी जी 2, 4 जी एलटीई

संपादित करें 3: Here are the logs USB डिवाइस में प्लग लगाने के बाद एक नेक्सस 5 पर adb shell dmesg कॉल करने से। आप लाइन 4-16 पर स्पष्ट रूप से देख सकते हैं कि फोन डिवाइस को गिनने में विफल रहता है।

+0

कृपया कुछ कोड पोस्ट करें? – napkinsterror

+0

बस किया। यह एक बहुत ही बुनियादी मामला है, इसलिए मुझे यकीन नहीं है कि यह कितना उपयोगी है। –

+0

क्या आप परिणाम प्रिंट कर सकते हैं? क्या आपने उचित अनुमतियां जोड़ दीं? – napkinsterror

उत्तर

2

यूएसबी डिवाइस को अपने एंड्रॉइड फोन से कनेक्ट करने के बाद इसे डिस्कनेक्ट करें और फोन को अपने कंप्यूटर से कनेक्ट करें ताकि आप कर्नेल लॉग को देखने के लिए adb shell dmesg का उपयोग कर सकें। यदि आप कर्नेल लॉग में डिवाइस दिखाते हैं तो फोन इसे पहचान रहा है और मुझे यकीन नहीं है कि यह UsbManager द्वारा क्यों नहीं लौटाया जाता है। मुझे संदेह है कि यह कर्नेल लॉग में दिखाई नहीं देगा या वहां कोई त्रुटि होगी।इसका शायद मतलब है कि डिवाइस फोन के ओटीजी नियंत्रक के साथ संगत नहीं है या सही तरीके से कार्य करने के लिए पर्याप्त शक्ति नहीं मिल रही है।

+0

'adb shell dmesg' का उपयोग करने के बारे में महान संकेत। [यहां लॉग हैं।] (Https://gist.github.com/MikeOrtiz/92fc07d4761ce6e0b4d3) लाइन 4-16 पर, यह दिखाता है कि यूएसबी डिवाइस गणना विफल रही। मुझे नहीं लगता कि यह मुद्दा सत्ता के साथ है। यह डिवाइस 100 एमए बनाम एक और यूएसबी डिवाइस खींचता है जिसे मैं सफलतापूर्वक गणना कर सकता हूं जो 500 एमए खींचता है। क्या इस मुद्दे को उत्पन्न करने के बारे में बेहतर समझने का कोई तरीका है? और क्या कोई कामकाज है, भले ही जड़ की आवश्यकता हो? –

+1

इस बिंदु पर इस मुद्दे को डीबग करने के लिए या तो अधिक लॉगिंग के साथ कर्नेल बनाना आवश्यक है (ताकि आप यह पता लगा सकें कि कौन से अनुरोध विफल हो रहे हैं और शायद अधिक विस्तार से) या यूएसबी प्रोटोकॉल स्नफ़फर खरीदना, यह देखने के लिए कि तार पर कुछ असामान्य हो रहा है या नहीं। –

1

मैं एक समाधान नहीं है और यहां तक ​​कि एक उपयोगी संकेत नहीं हो सकता है, लेकिन त्रुटि लगता है कुछ हद तक समझाने के योग्य हो:

#define EOVERFLOW 75 /* Value too large for defined data type */ 

आशा इस एक विवरण और अंत में एक समाधान की ओर जाता है।

कामल

संबंधित मुद्दे

 संबंधित मुद्दे