आपके द्वारा उल्लिखित मुद्दों को हल करने के लिए निम्नलिखित चरणों का उपयोग किया जा सकता है।
यूएसबी मास स्टोरेज के रूप में डिवाइस को घुमाने की प्रक्रिया डिवाइस और निर्माता-विशिष्ट में असंगत है। जब आप डिवाइस को यूएसबी केबल के माध्यम से डेस्कटॉप से कनेक्ट करते हैं तो नेक्सस एस जैसे कुछ डिवाइस "यूएसबी स्टोरेज चालू करें" की पेशकश करते हैं। गैलेक्सी एस 3 जैसे अन्य उपकरणों को डिवाइस को बड़े पैमाने पर भंडारण के रूप में लॉन्च करने के लिए अब एक ऐप की आवश्यकता है। किसी भी तरह से, एंड्रॉइड डिवाइस आमतौर पर ऐसी सुविधा प्रदान करते हैं, और आपको एक फ़ाइल बनाना होगा जो आपके डिवाइस के निर्माता विनिर्देश से मेल खाता हो।
आप USB होस्ट API के साथ कार्य करने से पहले अपने एप्लिकेशन की मेनिफेस्ट फ़ाइल को जोड़ने की जरूरत है:
- क्योंकि नहीं सभी एंड्रायड-संचालित डिवाइस USB होस्ट एपीआई समर्थन की गारंटी है, एक तत्व है कि वाणी शामिल अपने एप्लिकेशन android.hardware.usb.host सुविधा का उपयोग करता है।
- यदि आप चाहते हैं कि आपका एप्लिकेशन संलग्न यूएसबी डिवाइस के बारे में अधिसूचित किया जाए, तो अपनी मुख्य गतिविधि में android.hardware.usb.action.USB_DEVICE_ATTACHED इरादे के लिए एक और तत्व जोड़ी निर्दिष्ट करें।
जोड़ें अपने manisfest फाइल करने के लिए USB_DEVICE_ATTACHED:
<manifest ...>
<uses-feature android:name="android.hardware.usb.host" />
<uses-sdk android:minSdkVersion="12" />
...
<application>
<activity ...>
...
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
</application>
</manifest>
अपने एपीपी एक विशेष USB डिवाइस आप लक्ष्य फ़िल्टर उपयोग कर सकते हैं खोजने में मदद करने के लिए:
<activity ...>
...
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
आप अपने डिवाइस निर्दिष्ट करने के लिए भी है और विक्रेता आईडी:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<usb-device vendor-id="1234" product-id="5678" />
</resources>
यह शू उल USB host कनेक्शन से निपटने के लिए पर्याप्त हो।
int LIBUSB_CALL libusb_open2(libusb_device *dev, libusb_device_handle **handle, int fd);
उपयोग वर्णनकर्ता usb device से कनेक्शन खोलने में - उदाहरण के लिए:: अब यूएसबी फोन
UsbManager myUsbManager = (UsbManager)
getSystemService(Context.USB_SERVICE);
UsbAccessory myUsbAccessory = (myUsbManager.getAccessoryList())[0];
ParcelFileDescriptor pfd = myUsbManager.openAccessory(myUsbAccessory);
FileDescriptor fileDescriptor = pfd.getFileDescriptor();
FileInputStream myFileInputStream = new FileInputStream(fileDescriptor);
FileOutputStream myFileOutputStream = new FileOutputStream(fileDescriptor);
आप अभी भी SELinux स्तर के साथ समस्या है, तो यहां आपको कुछ संपादन में आप बनाने के लिए उपयोग कर सकते हैं अपने कार्यक्रम सुचारू रूप से संचालित:
// default.prop
ro.secure=1 -----------------> ro.secure=0
ro.adb.secure=1 -----------------> ro.adb.secure=0
//init.rc
setsebool debugfs 1 --------> setsebool debugfs 0
setenforce 0
setprop selinux.reload_policy 1 -------> setprop selinux.reload_policy 0
// init.target.rc
setprop selinux.reload_policy 1 -----> setprop selinux.reload_policy 0
SELinux के रूप में डिफ़ॉल्ट उच्चतम सुरक्षा को लागू करने के लिए सेट कर रहा है, और आप अपने Android देवी को एक ग्राहक पहुंच प्रदान करना चाहते यूएसबी के माध्यम से सीई।
अपने Android के निर्माता और मॉडल के आधार पर, यूएसबी केबल आपके डिवाइस और डेस्कटॉप को जोड़ने अनप्लग प्रयास करें, और उसे वापस प्लग। आप भंडारण "USB चालू करें" करने के लिए प्रेरित किया जाना चाहिए। यदि ऐसा है, तो आगे बढ़ें और एंड्रॉइड पर सेटिंग्स → अधिक ... पर ब्राउज़ करने का प्रयास करें, और यूएसबी मास स्टोरेज विकल्प की तलाश करें।
http://www.pocketables.com/images/old/6a00d83451c9ec69e201675f40c44a970b-500wi.png
वैकल्पिक रूप से USB विपुल भंडारण प्रक्रिया अपने उपकरण निर्माता द्वारा सिफारिश के लिए देखो। जब आप यूएसबी स्टोरेज चालू करते हैं, तो डिवाइस आपको बताता है कि कुछ ऐप्स रुक जाएंगे, आगे बढ़ें और ठीक है। अब अपने डेस्कटॉप कंप्यूटर पर जाएं और अपने यूएसबी मास स्टोरेज माध्यम पर ब्राउज़ करें, जिसे अक्सर नाम नहीं कहा जाता है यदि आपने इसका नाम बदल नहीं लिया है। अपने बड़े भंडारण डिवाइस पर क्लिक करें, और वहां पैर फ़ोल्डर में, data.tsv नामक फ़ाइल ढूंढें।
तुम भी अपने पसंदीदा पाठ संपादक में खोलने से data.tsv देख सकते हैं। आपको एक टैब द्वारा अच्छी तरह से अलग किए गए दो कॉलम मिलेंगे; प्रत्येक पंक्ति में, आपको पूर्णांक मानों की एक जोड़ी मिल जाएगी। यह हमारी परियोजना के लिए पूरी तरह से पर्याप्त है। अधिक जटिल डेटा परियोजनाओं को आम तौर पर प्रत्येक पंक्ति के लिए एक अद्वितीय पहचानकर्ता की आवश्यकता होती है, एक तालिका में एक पंक्ति दूसरे में एक विशिष्ट रिकॉर्ड को इंगित करने के लिए।
अपने development environment के अनुसार, आप भी धुन पर अपनी सेटिंग्स तदनुसार की है। यदि आप विंडोज़ पर विकास कर रहे हैं, तो यूएसबी ड्राइवर स्थापना instructions available का पालन करें। यदि आप लिनक्स पर विकास कर रहे हैं, तो विकास के लिए अपने डिवाइस setting up के निर्देशों का पालन करें।
इसके अलावा, यह भी है कि कई पूर्व में जारी एंड्रायड-संचालित डिवाइस एक यूएसबी डिवाइस के रूप में अभिनय के ही लायक हैं और बाहरी USB उपकरणों के साथ कनेक्शन आरंभ नहीं कर सकते हैं उल्लेख करने के लिए लायक है। एंड्रॉइड ओपन एक्सेसरी (एओए) समर्थन इस सीमा को खत्म करता है और आपको एक्सेसरीज़ बनाने की अनुमति देता है जो एक्सेसरी को connection शुरू करने की इजाजत देकर एंड्रॉइड संचालित उपकरणों के वर्गीकरण के साथ बातचीत कर सकता है। एंड्रॉइड ओपन एक्सेसरी के सामान्य उपयोग का एक उदाहरण प्रोजेक्ट में पाया जा सकता है: रिकॉर्ड करें और USB host mode का उपयोग करके ऑडियो वापस चलाएं - निश्चित रूप से यूएसबी मोड को चलाने और चलाने की आवश्यकता है।
एंड्रॉयड लाना Arduino microcontrolers साथ USB के माध्यम से संवाद करने के लिए भी लागू करने की एक प्रकार है कि, सबसे हाल ही में बहुत सफल बनने के लिए के रूप में यह आप अपने Android क्षमताओं एक बहु डिवाइस के माध्यम से अतिरिक्त सुविधाओं को एकीकृत का विस्तार करने की अनुमति देता है पता चला है समाधान दृष्टिकोण। एक ठेठ Arduino स्केच अपने Android यूएसबी डिवाइस संचार इस प्रकार दिखाई देगा अनुमति देने के लिए:
// the USB Host libraries
#include <Max3421e.h>
#include <Usb.h>
// the AOA library
#include <AndroidAccessory.h>
void setup();
void loop();
void setup()
{ // start serial debugging
Serial.begin(115200);
Serial.print("\r\nADK has run setup().");
Serial.println("Ready to start USB communication...");
}
void loop()
{ // example - read the voltage from a sensor
uint16_t val;
val = analogRead(TEMP_SENSOR); // or any sort of input
Serial.println(val,HEX);
Serial.write(val);
// Delay for 100 milliseconds.
delay(100);
}
सभी Arduino परियोजनाओं एक सेटअप() और एक पाश() विधि घोषित अन्यथा अपने Android ठीक से संवाद नहीं होगा होना आवश्यक है।
भी याद रखें कि एओए का उपयोग करने के लिए आवश्यक न्यूनतम आवश्यकताओं की एक सूची:
- एक एओए-संगत Android डिवाइस। इस उदाहरण को आजमाने से पहले संगतता का परीक्षण करने के लिए, कृपया Google Play पर उपलब्ध माइक्रोचिप एओए प्रदर्शन ऐप्स के लिंक के लिए "समर्थित एंड्रॉइड डिवाइस" अनुभाग देखें।
- एक संगत माइक्रोकंट्रोलर बोर्ड। यदि आप अनिश्चित हैं तो Arduino मेगा एडीके एक आसान विकल्प होगा।
यूएसबी का उपयोग कर Android उपकरणों की संभावनाएं अद्भुत हैं, और अभिनव एप्लिकेशन कि पूरा फायदा इस तरह की सुविधाओं लेने में सक्षम हैं के लिए मांग उल्लेखनीय बढ़ने को तैयार है।
क्या यह 'UsbDevice' के साथ-साथ' UsbAccessory' 'के लिए भी काम करता है? –
हां यह काम करता है। लेकिन UsbAccessry के लिए आपको USB_ACCESSORY_ATTACHED इरादा का उपयोग करना होगा। – Avanz