2011-11-13 12 views
6

पर बाहरी मेमोरी तक कैसे पहुंच सकते हैं मैं एक सोनी इंटरनेट टीवी का उपयोग विकास उपकरण के रूप में कर रहा हूं, जिसमें 4 यूएसबी पोर्ट हैं। बाहरी हार्ड ड्राइव के साथ सभी या कोई बंदरगाहों का उपयोग नहीं किया जा सकता है। मैं डिवाइस पर बाहरी मेमोरी बनाम आंतरिक मेमोरी का चयन और एक्सेस कैसे कर सकता हूं।आप Google टीवी

मैं एसडी कार्ड उपयोग करने में सक्षम हूँ, या कम से कम क्या का उपयोग कर एसडी कार्ड के रूप में टीवी लेबल निम्नलिखित:

Environment.getExternalStorageDirectory(); 

लेकिन मैं कैसे बाहरी USB को खोजने के लिए यह पता लगाने नहीं कर पा रहे उपकरण। मैंने UsbManager क्लास के पथ को नीचे जाने का प्रयास किया है, लेकिन ऐसा लगता है कि एक आसान और अधिक सामान्य तरीका होना चाहिए। मैं बस बड़े पैमाने पर भंडारण उपकरणों को देखने में सक्षम होना चाहता हूं और विक्रेता आईडी के माध्यम से साफ नहीं करना चाहता हूं लेकिन शायद मुझे वहां कुछ याद आ रहा है।

यह संभव होना चाहिए क्योंकि मैं मेनू खोलने और "डिवाइस का चयन करें" चुनते समय मीडिया प्लेयर ऐप द्वारा प्राप्त समान कार्यक्षमता की तलाश में हूं।

मुझे केवल ड्राइव तक पढ़ने की आवश्यकता है, लेकिन पढ़ने/लिखना उपयोगी हो सकता है।

अग्रिम धन्यवाद।

उत्तर

6

Google टीवी v2 में, यूएसबी स्टोरेज समर्थन के संबंध में कुछ बदलाव हुए थे। यूएसबी ड्राइव के लिए प्रमुख परिवर्तन हैं:
1. यूएसबी ड्राइव/sdcard के बजाय/mnt/media/usb.XXXXX आरोहित किया जाएगा। (XXXXX यूएसबी वॉल्यूम के आईडी (वॉल्यूम आईडी: vfat या exfat, uuid: ntfs) द्वारा तय किया जाता है।)
2.GTV एकाधिक यूएसबी ड्राइव का समर्थन करता है। उपयोगकर्ता एकाधिक यूएसबी ड्राइव प्लग कर सकते हैं।

मीडियाप्रोवाइडर सभी प्लग किए गए यूएसबी वॉल्यूम्स में सभी मीडिया फ़ाइलों को अनुक्रमणित करता है। इसलिए, सभी मीडिया फ़ाइलों को पुनर्प्राप्त करने के लिए अनुप्रयोग MediaProvider के खिलाफ क्वेरी कर सकते हैं।

नमूना कोड:

कर्सर कर्सर = getContentResolver() क्वेरी (
Images.Media.EXTERNAL_CONTENT_URI,
नई String [] {
Images.Media._ID,
Images.Media।।डेटा, // फ़ाइल पथ
},
शून्य, शून्य, शून्य);

कैसे आवेदन जब ड्राइव समन्वयित या अलग हो ?:
आपको Intent.ACTION_MEDIA_SCANNER_FINISHED और Intent.ACTION_MEDIA_EJECT प्राप्त करने के लिए BroadcastReceiver रजिस्टर कर सकते हैं है का पता लगा सकते।

+0

क्या '/ mnt/media/usb.XXXXX' कुछ ऐसा है जिसे हम एसडीके डेवलपर्स पर भरोसा कर सकते हैं? मुझे पता नहीं है कि यह कहीं और दस्तावेज है। आईओओ, क्या यह ऐसी चीज है जो कहती है, किताब लेखकों को शायद Google टीवी को कवर करने वाली किताबों में शामिल होना चाहिए? :-) धन्यवाद! – CommonsWare

+0

मुझे पता चल जाएगा और आपको कुछ दिनों में पता चल जाएगा। –

+2

अभी तक यूएसबी स्टोरेज एपीआई के लिए कोई योजना नहीं है। यूएसबी स्टोरेज तक पहुंचने के लिए अनुशंसित तरीका MediaProvider के माध्यम से है। –

1

तो अंतर्ज्ञान USB accessories api का उपयोग करने के लिए कहता है। हालांकि, यह केवल एंड्रॉइड 3.1 और ऊपर के लिए उपलब्ध है और यदि मुझे सही याद है, तो 3.0 टीवी एडीआई 3.0 एपीआई के लिए। जिसके अनुसार, प्रलेखन से:

com.android.future.usb: एंड्रॉयड 2.3.4 में USB सहायक उपकरण मोड का समर्थन करने के लिए गूगल एपीआई ऐड-ऑन पुस्तकालय बैकपोर्टेड को USB सहायक एपीआई भी शामिल है और वे में निहित हैं यह नामस्थान

तो यूएसबी सामग्री तक पहुंचने के लिए Google APIs add-on library चेकआउट करें।

+0

वास्तव में, वे 3.1 के साथ शिपिंग रहे हैं। मैं यूएसबी accesories एपीआई में देखेंगे। धन्यवाद। – dzimney

1

लेकिन मुझे यह पता लगाना प्रतीत नहीं होता कि बाहरी यूएसबी डिवाइस कैसे ढूंढें।

बाहरी यूएसबी ड्राइव के लिए एंड्रॉइड एसडीके में कोई आधिकारिक समर्थन नहीं है। मुझे यह सुझाव देने के लिए Google टीवी डेवलपर दस्तावेज़ में कुछ भी नहीं दिख रहा है कि उन्होंने इस क्षेत्र में कुछ भी जोड़ा है।

+0

क्या यूएसबी एक्सेसरीज़ एपीआई बाहरी यूएसबी उपकरणों के साथ काम नहीं करता है? –

+0

@ कुर्टिस नुस्बाम: ठीक है, आप जावा में यूएसबी मास स्टोरेज मोड को लागू नहीं कर सकते हैं। आपके द्वारा लिंक किए गए पृष्ठ का उद्धरण: "यूएसबी एक्सेसरी मोड उपयोगकर्ताओं को यूएसबी होस्ट हार्डवेयर को विशेष रूप से एंड्रॉइड संचालित उपकरणों के लिए डिज़ाइन करने की अनुमति देता है। एक्सेसरीज़ को एंड्रॉइड एक्सेसरी डेवलपमेंट किट दस्तावेज में उल्लिखित एंड्रॉइड एक्सेसरी प्रोटोकॉल का पालन करना होगा।" यह यूएसबी मास स्टोरेज मोड नहीं है। यूएसबी ड्राइव में प्लगिंग को ऑटो-माउंट करना चाहिए, लेकिन माउंट पॉइंट्स को खोजने के लिए कोई आधिकारिक एपीआई नहीं है, यह निर्धारित करें कि यह लिखने योग्य है या नहीं। – CommonsWare

+1

ऐसा लगता है कि बड़े पैमाने पर स्टोरेज डिवाइस "एक्सेसरीज़" नहीं बल्कि "डिवाइस" हैं। मैं अभी भी समस्या के माध्यम से काम कर रहा हूं और अभी तक एक डिवाइस (प्रोग्रामेटिक रूप से) को बड़े पैमाने पर स्टोरेज डिवाइस के रूप में पहचानने में सक्षम नहीं हूं। वर्तमान में मैं उपकरणों की एक सूची देखने में सक्षम हूं, लेकिन मेरे यूएसबी मास स्टोरेज डिवाइस UsbConstants को वापस नहीं करते हैं। यूएसबी_CLASS_MASS_STORAGE [लिंक] (http://developer.android.com/reference/android/hardware/usb/UsbConstants.html#USB_CLASS_MASS_STORAGE) [/ link] उनके डिवाइस वर्ग के रूप में (Device.getDeviceClass का उपयोग करके)। हो सकता है कि Google ने यूएसबी पैकेज को पूरी तरह से फ्लश नहीं किया हो। – dzimney

0

आप किसी भी getExternalXXX() के साथ यूएसबी डिवाइस तक नहीं पहुंच सकते हैं, और मीडियाप्रोवाइडर के माध्यम से जाकर मीडिया के रूप में वर्गीकृत केवल फाइलों (जैसे कोई .txt) के लिए आपके पास एक फ्लैट संग्रह (निर्देशिका संरचना खो जाती है) होगी।

मैंने इस आवश्यकता और कुछ अन्य लोगों के लिए libmedia विकसित किया। सोनी एनएसजेड-जीएस 7 पर परीक्षण किया गया।

नमूना कोड:

VolumeManager volumeManager = new VolumeManager(); 
List<Volume> volumes = volumeManager.getVolumes(); 
for (Volume volume: volumes) { 
    String label = volume.getLabel(); 
    File rootFolder = volume.getRoot(); 
    File[] files = rootFolder.listFiles(); 
    for (File file: files) { 
     String filename = file.getName(); 
    } 
} 
संबंधित मुद्दे