2011-01-03 16 views
5

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

जैसा कि मैं इसे समझता हूं, एंड्रॉइड के पास कोई डिफ़ॉल्ट मीडिया प्लेयर नहीं है। मेरे पास मूल Droid है और इसमें मीडिया प्लेयर है, लेकिन मैं समझता हूं कि अन्य वाहक स्वयं का उपयोग करते हैं, या उपयोगकर्ता मानक को अनइंस्टॉल कर सकता है।

मैंने कुछ चीजों की कोशिश की है लेकिन काम करने के लिए कुछ भी नहीं मिल सकता है।

मैंने इस कोड को आजमाया, जिसे इरादे का समर्थन करने वाले पैकेजों की एक सूची प्राप्त करने के लिए माना जाता है। यह कुछ चीजों के लिए काम करता है जैसे "एप्लिकेशन/पीडीएफ" और "वीडियो/*"। जब मैं इसे "ऑडियो/*" के साथ आज़माता हूं तो मुझे एक खाली सूची मिलती है, भले ही मेरे पास स्टॉक एंड्रॉइड मीडिया प्लेयर और मिक्सजिंग दोनों स्थापित हों। "मीडिया/*" के साथ भी कोशिश की है और कुछ भी नहीं मिला है।

PackageManager packageManager = getPackageManager(); 
Intent testIntent = new Intent(Intent.ACTION_VIEW); 
testIntent.setType("audio/*"); 
List list = packageManager.queryIntentActivities(testIntent, 0); 

मैं इस कोड है जो काम करता है और डिफ़ॉल्ट प्लेयर के साथ एक ऑडियो फ़ाइल को खोलता है देखा है, लेकिन मैं एक फ़ाइल खोलने के लिए नहीं करना चाहते हैं, मैं सिर्फ ऑडियो एप्लिकेशन को खोलने के लिए उपयोगकर्ता के रूप में अगर इसे खोला चाहते आवेदन दराज से।

Intent i = new Intent(Intent.ACTION_VIEW); 
Uri u = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"1"); 
i.setData(u); 
startActivity(i); 

केवल दूसरी बात मैं ऐसा करने में सोच सकते हैं बाहर जाकर में सबसे लोकप्रिय मीडिया प्लेयर और हार्ड कोड उनमें से पैकेज के नाम मिलता है और फोन खोज को देखने के लिए कि कौन सा स्थापित कर रहे हैं, लेकिन इस करता ' टी सबसे अच्छा दृष्टिकोण की तरह लग रहा है। मुझे समझ में नहीं आता कि कोड का पहला बिट क्यों काम नहीं करता है। हो सकता है कि इरादे फ़िल्टर उन ऐप्स के लिए उचित रूप से सेट न हों या मैं गलत कोड या माइम प्रकार का उपयोग कर रहा हूं।

+0

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

+0

ठीक है मुझे लगता है कि मेरे पास यह काम है। जब मैं इसे प्राप्त करता हूं तो मैं समाधान पोस्ट करूंगा। – Bob

+0

यह आपके लिए भी काम कर सकता है: http://stackoverflow.com/questions/18161237/list-installed-media-players-android/21658150#21658150 – yado

उत्तर

6

ठीक है यहां मैं स्थापित ऑडियो प्लेयर की सूची के लिए ओएस से कैसे पूछता हूं।

Intent intent = new Intent(Intent.ACTION_VIEW); 
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"1"); 
intent.setData(uri); 
List<ResolveInfo> playerList; 
playerList = packageManager.queryIntentActivities(intent, 0); 

playerList तो फोन ऑडियो संभाल करने का दावा है कि हर अनुप्रयोग के लिए ResolveInfo वस्तुओं के साथ भरे जाएंगे। ResolveInfo से आप गतिविधि लॉन्च करने के लिए पैकेज नाम जैसी चीज़ें प्राप्त कर सकते हैं, आप आइकन और ऐप नाम प्राप्त कर सकते हैं। मैं इसे एक कस्टम संवाद को पॉप्युलेट करने के लिए उपयोग करता हूं जो लॉन्च करने के लिए एक गतिविधि चुनने के लिए स्टॉक एंड्रॉइड डायलॉग की तरह दिखता है और कार्य करता है। मेरे पास उपयोगकर्ता के लिए चुने हुए ऐप को डिफ़ॉल्ट रूप से सेट करने का विकल्प भी है।

यह सही नहीं है। आप ओएस की दया और ऐप के intent फ़िल्टर पर हैं। मैंने कुछ फोनों के साथ यह कोशिश की है और निम्नलिखित ऐप्स ठीक से दिख रहे हैं: मूल Droid के लिए स्टॉक मीडिया प्लेयर, एचटीसी फोन के लिए स्टॉक मीडिया प्लेयर, डबलटविस्ट और मिक्सजिंग। हालांकि, मैंने ज़िमली स्थापित की और यह दिखाई नहीं दे रहा है। मुझे संदेह है कि उनके इरादे फिल्टर ऑडियो के लिए सेट नहीं हैं।

मुझे भी चिंता थी कि MediaStore.Audio.Media.INTERNAL_CONTENT_URI में कोई ऑडियो नहीं होने पर ऐसे मामले हो सकते हैं। मैंने रीबूट के तुरंत बाद इस कोड को आजमाया है और यह काम करता है। मैंने इसे किसी ऐसे फ़ोन पर नहीं देखा है जिसमें उपयोगकर्ता मीडिया इंस्टॉल नहीं है। आप, आप "setDataAndType" का उपयोग करना चाहिए "वीडियो/" या "ऑडियो/" Apps की एक सूची प्राप्त चाहते हैं

+0

मैंने आपके कोड की कोशिश की है, यह मीडिया प्लेयर प्राप्त कर रहा है, क्या कोई कोड है डिवाइस में ऑडियो और vedio फ़ाइलों की दुकान की सूची तक पहुंचने के लिए। –

+0

हाय बॉब, आप ऐप्स की सूची कैसे दिखाते हैं ?? धन्यवाद – Ivan

+0

@ बॉब: यह मुझे 'डब्ल्यू/कंटेंट रीसोलवर देता है: इसके लिए टाइप करने में विफल: सामग्री: // मीडिया/बाहरी/ऑडियो/मीडिया/1 (अज्ञात यूआरएल: सामग्री: // मीडिया/बाहरी/ऑडियो/मीडिया/1) 'निष्पादित करते समय त्रुटि ... क्या AndroidManifest.xml में जोड़ने की अनुमति है? – Kushal

2
Intent resolveIntent = new Intent(Intent.ACTION_VIEW); 
if (type.startsWith("audio/*")) { 
    Uri uri = Uri.withAppendedPath(
      MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1"); 
    resolveIntent.setDataAndType(uri, type); 
} else if (type.startsWith("video/*")) { 
    Uri uri = Uri.withAppendedPath(
      MediaStore.Video.Media.INTERNAL_CONTENT_URI, "1"); 
    resolveIntent.setDataAndType(uri, type); 
} else if (type.startsWith("application/pdf")) { 
    resolveIntent.setType(type); 
} 

List<ResolveInfo> pkgAppsList = mContext.getPackageManager().queryIntentActivities(resolveIntent, PackageManager.GET_RESOLVED_FILTER); 

यहाँ, मेरी हल है; लेकिन अगर आप "टेक्स्ट/*" या "पीडीएफ" एपीपी की एक सूची प्राप्त करना चाहते हैं, तो आप "सेट टाइप" का उपयोग कर सकते हैं।

0
Intent resolveIntent = new Intent(Intent.ACTION_VIEW); 
resolveIntent.setDataAndType(Uri.parse("file://"), MIMEType); 
List<ResolveInfo> pkgAppsList = mContext.getPackageManager().queryIntentActivities(resolveIntent, PackageManager.MATCH_DEFAULT_ONLY| PackageManager.GET_RESOLVED_FILTER); 

मुझे लगता है कि यह बेहतर है!

+1

यह कहना एक अच्छा विचार होगा कि आपको क्यों लगता है कि यह बेहतर है। – Dreamwalker

0

मेरे सैमसंग गैलेक्सी एस 4 के लिए एंड्रॉइड संस्करण 5.0 चल रहा है, काम से ऊपर के कोई भी समाधान नहीं है, लेकिन मुझे एक और समाधान मिला। अच्छी तरह से काम। यहां किसी ऐसे व्यक्ति के लिए कोड है जिसकी सहायता की आवश्यकता हो सकती है।

Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setDataAndType(Uri.fromFile(new File("content://media/internal/audio/media")), "audio/*"); 
    List<ResolveInfo> activities = this.getPackageManager().queryIntentActivities(intent, 0); 
    // content://media/internal/audio/media 
    //List<ResolveInfo> activities; 
    activities = getPackageManager().queryIntentActivities(intent, 0); 
    int count = activities.size(); 
    String a = Integer.toString(count); 

    //set alert for executing the task 
    AlertDialog.Builder builder1 = new AlertDialog.Builder(this); 
    builder1.setMessage("Handle: " + a); 
    builder1.setCancelable(true); 

    AlertDialog alert11 = builder1.create(); 
    alert11.show(); 
3
काम करता है इसके बाद के संस्करण समाधान के एंड्रॉयड संस्करण 5.0, कोई नहीं चल एस 4 मेरी सैमसंग गैलेक्सी के लिए

/* लेकिन मैं एक और समाधान मिल गया। अच्छी तरह से काम। यहां किसी ऐसे व्यक्ति के लिए कोड है जिसकी सहायता की आवश्यकता हो सकती है। */

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(new File("content://media/internal/audio/media")), "audio/*"); 
List activities = this.getPackageManager().queryIntentActivities(intent, 0); 
List activities; activities = getPackageManager().queryIntentActivities(intent, 0); int count = activities.size(); String a = Integer.toString(count); 

//set alert for executing the task 
AlertDialog.Builder builder1 = new AlertDialog.Builder(this); 
builder1.setMessage("Handle: " + a); 
builder1.setCancelable(true); 

AlertDialog alert11 = builder1.create(); 
alert11.show(); 
+1

यह एकमात्र समाधान है जो नए फोन पर भी मेरे लिए काम कर रहा है! – pivu0

0
/** 
    * get apps supporting video playing 
    * @return 
    */ 
    private List<String> queryPlayerPackageNameLst() 
    {   
     Intent intent = new Intent(Intent.ACTION_VIEW); 
     intent.setDataAndType(Uri.parse(video), "video/*"); 

     PackageManager pm = getPackageManager(); 

     List<ResolveInfo> infos = pm.queryIntentActivities(intent,PackageManager.MATCH_UNINSTALLED_PACKAGES); 

     List<String> packageNameLst = null; 

     if (infos != null && infos.size() > 0) 
     { 
      packageNameLst = new ArrayList<String>(infos.size()); 

      for(int i=0; i<infos.size(); i++) 
      { 
       ResolveInfo info = infos.get(i); 

       packageNameLst.add(info.activityInfo.packageName); 
       //info.activityInfo.name 
      } 
     } 

     return packageNameLst; 
    }