2011-01-29 14 views
6

क्षमा करें अगर इसका पहले ही उत्तर दिया गया है - अगर कोई मुझे पहले से ही उत्तर दिए गए प्रश्न पर इंगित कर सकता है, तो यह बहुत अच्छा होगा ...एंड्रॉइड में, मैं फ़ाइल प्रकार के आधार पर एक एप्लिकेशन चयनकर्ता कैसे प्रदर्शित कर सकता हूं?

बहुत आसान, मैं उन अनुप्रयोगों की एक सूची पॉप अप करने में सक्षम होना चाहता हूं किसी दिए गए प्रकार की फ़ाइल को संसाधित कर सकते हैं - उदाहरण के लिए, यदि मेरे पास एक संगीत फ़ाइल (एमपी 3, ओग, जो भी हो) है, तो मैं सभी लोड किए गए मीडिया अनुप्रयोगों की एक सूची प्रदर्शित करने में सक्षम होना चाहता हूं जो फ़ाइल को संसाधित कर सकते हैं और अनुमति दे सकते हैं एक का चयन करने के लिए उपयोगकर्ता।

Intent myIntent = new Intent(); 
myIntent.setAction(Intent.ACTION_VIEW); 
myIntent.addCategory("android.intent.category.LAUNCHER"); 
myIntent.setType("mp3"); 
startActivity(myIntent); 

लेकिन मैं स्पष्ट रूप से, गलत यह मिल गया है, क्योंकि यह हर बार दुर्घटनाओं:

मैं इस प्रकार यह करने के लिए कोई लक्ष्य बनाने के साथ प्रयोग करना रहा है। क्या मुझे ACTION_VIEW के बजाय ACTION_PICK या ACTION_CHOOSER का उपयोग करना चाहिए?

अधिक महत्वपूर्ण बात यह है कि क्या सभी मीडिया प्लेयर को Intent.type के अलावा किसी अन्य चीज़ से आसानी से परिभाषित करना संभव है? मेरा मानना ​​है कि प्रकार एक उचित MIME प्रकार, छोटे अक्षर में होना चाहिए, लेकिन मैं इस उदाहरण में क्या उपयोग करने के लिए यकीन नहीं है ...

कृपया कोमल हो :)

+0

यह देखने के लिए कि किसी के पास कोई जवाब है (यहां तक ​​कि आंशिक उत्तर) ... – roryhewitt

+0

मुझे एक समान समस्या थी। मैंने एप्लिकेशन चयनकर्ता प्राप्त करने के लिए निम्न समाधान का उपयोग किया: http://stackoverflow.com/questions/7635764/application-selection-dialog-based-on-filetype यह समाधान आपके स्वयं के संवाद को बनाने की आवश्यकता को भी दूर करता है। – kaspermoerch

उत्तर

8

उन अनुप्रयोगों को प्राप्त करने के लिए जो किसी दिए गए इरादे को सफलतापूर्वक खोल सकते हैं, आप पैकेजमैनेजर का उपयोग करेंगे। बस ऊपर के इरादे का निर्माण करें और फिर इस कोड का उपयोग उन अनुप्रयोगों को प्राप्त करने के लिए करें जो इरादे को संभाल सकें।

Intent myIntent = new Intent(); 
myIntent.setAction(Intent.ACTION_VIEW); 
myIntent.addCategory("android.intent.category.LAUNCHER"); 
myIntent.setType("mp3");  

PackageManager manager = getPackageManager(); 
List<ResolveInfo> info = manager.queryIntentActivities(
    myIntent, PackageManager.MATCH_DEFAULT_ONLY); 

यह आपको उन कार्यक्रमों पर सारी जानकारी देगा जो आइकन, और पैकेजेनाम सहित इरादे को संभाल सकते हैं। फिर आप इन विकल्पों के साथ एक संवाद बॉक्स बना सकते हैं और उपयोगकर्ता द्वारा चुने गए विकल्प को सहेज सकते हैं।

+0

"ऊपर के इरादे" से, आपका मतलब @ एसएसटीएन कोड है? इस मामले में, आप का मतलब है प्रारंभिक गतिविधि() के बजाय अपने पैकेज प्रबंधक कोड ** ** का उपयोग करें? – roryhewitt

+0

सही। फिर वह आपको आवश्यक सारी जानकारी देगा। मुझे थोड़ा सा कोड साफ़ करने दें। –

+0

यह बहुत अच्छा लग रहा है! मुझे नहीं लगता कि आपके पास लटकने वाले उपयुक्त संवाद बॉक्स के लिए कोई कोड है, है ना? या क्या मैं बस अपना खुद का 'मानक' बना सकता हूं? – roryhewitt

1

मुझे लगता है कि आप इस चयनकर्ता देखना चाहते हैं यदि आप एक फ़ाइल (या यूआरएल) खोलते हैं तो संवाद करें और इसे संभालने के लिए पंजीकृत एक से अधिक एप्लिकेशन हैं? जैसे आप यूट्यूब यूआरएल खोलते हैं और यूट्यूब प्लेयर या ब्राउज़र का उपयोग करने के लिए चुन सकते हैं?

आशय का प्रकार है कि प्रणाली भेजता है जब मैं (फ़ाइल ब्राउज़र के माध्यम से) एक छवि खोलना चाहते हैं:

File f = new File("/sdcard/IMG_0114.JPG"); 
Uri uri = Uri.fromFile(f); 

Intent i = new Intent(Intent.ACTION_VIEW); 
// use setDataAndType() - setData() and setType() cancel each other 
i.setDataAndType(uri, "image/jpeg"); 
i.putExtra("preview", false); 
i.putExtra("key_filename", "/sdcard/IMG_0114.JPG"); 
i.putExtra(Intent.EXTRA_STREAM, uri); 
i.putExtra("sort_order", 0); 

// It's one of the flag combinations: 
i.setFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION); 

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
     Intent.FLAG_ACTIVITY_SINGLE_TOP | 
     Intent.FLAG_ACTIVITY_MULTIPLE_TASK | 
     Intent.FLAG_DEBUG_LOG_RESOLUTION); 

startActivity(i); 

संपादित करें: एक काम (न्यूनतम) समाधान प्राप्त करने के लिए कोड में सुधार किया।

मुझे यकीन नहीं है कि अतिरिक्त डेटा के कौन से फ़ील्ड सेट किए जाने हैं - इसके लिए दस्तावेज़ नहीं मिला।

+0

आप सही हैं कि मैं चयनकर्ता संवाद देखना चाहता हूं। हालांकि, मैं वास्तव में फ़ाइल को खोलना नहीं चाहता (वास्तव में, मुझे वास्तव में एक विशिष्ट फ़ाइल नहीं मिल रही है) - मैं उस विधि को वापस करने में सक्षम होना चाहता हूं जिसका उपयोग उस फ़ाइल को खोलने के लिए किया जाएगा। – roryhewitt

+0

असल में, मैं एक फ़ाइल ** टाइप ** के लिए एक चयनकर्ता पॉप अप करना चाहता हूं और फिर चुने गए एप्लिकेशन के नाम को सहेजने में सक्षम हूं (मेरे आवेदन में)। क्या इसका कोई मतलब है? – roryhewitt

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

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