10

के रूप में पंजीकृत करें मैं अपने ऐप को प्लेयर की सूची में देखना चाहता हूं ("कार्रवाई का उपयोग जारी रखें ...") जब मैं ऑडियो फ़ाइल खोलने का प्रयास करता हूं (यानी फ़ाइल ब्राउज़र या जीमेल अटैचमेंट से)। आपकी मदद के लिएसंगीत प्लेयर

<intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 

     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 

    <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
    </intent-filter> 

    <intent-filter> 
     <action android:name="android.intent.action.MUSIC_PLAYER" /> 
    </intent-filter> 

    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.CATEGORY_APP_MUSIC" /> 
    </intent-filter> 

    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
     <data android:mimeType="audio/mpeg" /> 
    </intent-filter> 

धन्यवाद: यहाँ आशय फिल्टर मैं अपने MainActivity के लिए कोशिश की है कर रहे हैं!

+0

हे इस जवाब मेरे लिए अच्छी तरह से काम:

यहां एक संपूर्ण कोड उदाहरण है। लेकिन जब मैं गाना चुनता हूं और सूची से अपना ऐप चुनता हूं, तो यह मेरा ऐप सफलतापूर्वक खुलता है लेकिन उस चुने हुए गीत को नहीं चलाता है। उसके लिए क्या करना है ?? कृपया सहायता कीजिए! –

उत्तर

13

तुम हमेशा, एक <activity><intent-filter> पर एक <category> की जरूरत है क्योंकि हमेशा Intent पर कम से कम एक श्रेणी startActivity() के साथ प्रयोग किया।

AndroidManifest:

 <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:scheme="file"/> 
      <data android:mimeType="audio/*"/> 
      <data android:mimeType="application/ogg"/> 
      <data android:mimeType="application/x-ogg"/> 
      <data android:mimeType="application/itunes"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <data android:scheme="http" /> 
      <data android:mimeType="audio/*"/> 
      <data android:mimeType="application/ogg"/> 
      <data android:mimeType="application/x-ogg"/> 
      <data android:mimeType="application/itunes"/> 
     </intent-filter> 
     <intent-filter 
      android:priority="-1"> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <data android:scheme="content" /> 
      <data android:mimeType="audio/*"/> 
      <data android:mimeType="application/ogg"/> 
      <data android:mimeType="application/x-ogg"/> 
      <data android:mimeType="application/itunes"/> 
     </intent-filter> 
+0

दो प्रश्न ... क्या होगा यदि हम केवल एमपी 3 फाइलों के लिए डिफ़ॉल्ट होना चाहते थे ... सभी ऑडियो फाइल नहीं ... और दो प्रश्न, फिर हम गतिविधि में फाइल जानकारी/पथ कैसे प्राप्त करते हैं? – DeNitE

+0

@DeNitE: "क्या होगा यदि हम केवल एमपी 3 फ़ाइलों के लिए डिफ़ॉल्ट होना चाहते हैं" - आप किसी भी चीज़ के लिए डिफ़ॉल्ट नहीं होने जा रहे हैं, जब तक कि उपयोगकर्ता आपको डिफ़ॉल्ट बनाने का विकल्प नहीं चुनता। उपयोगकर्ता आपको 'इरादा-फ़िल्टर>' तत्वों के सेट के माध्यम से समर्थन करने के लिए चुने गए किसी भी 'इरादे' संरचना के लिए डिफ़ॉल्ट बनाने का विकल्प चुन सकता है। "फिर हम गतिविधि में फाइल जानकारी/पथ कैसे प्राप्त करते हैं?" - 'गतिविधि' प्राप्त करने के लिए 'getIntent()' को कॉल करें जिसे आपकी गतिविधि शुरू करने के लिए उपयोग किया गया था। यह एक फ़ाइल नहीं होगी, आमतौर पर ('सामग्री: 'योजना अधिक संभावना है)। – CommonsWare

+0

ठीक है, यह समझ में आता है ... मुझे दोबारा दोहराएं ... हम केवल एमपी 3 फाइलों के लिए समर्थन की आपूर्ति करना चाहते थे, न कि सभी ऑडियो फाइलें? – DeNitE

4

यह मेरे लिए काम किया:

यहाँ the AOSP Music एप्लिकेशन uses क्या है

<intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:scheme="file" android:pathPattern=".*mp3" android:mimeType="audio/mpeg" /> 
</intent-filter> 

MainActivity:

@Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 

    if (Intent.ACTION_VIEW.equals(getIntent().getAction())) 
    { 
     File file = new File(getIntent().getData().getPath()); 

     // do what you want with the file...  
    } 
0

यह काम करता है मुझे

<intent-filter> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <category android:name="android.intent.category.BROWSABLE"/> 
    <data android:scheme="content"/> 
    <data android:scheme="file"/> 
    <data android:mimeType="application/x-flac"/> 
    <data android:mimeType="audio/*"/> 
    <data android:mimeType="application/ogg"/> 
    <data android:mimeType="application/x-ogg"/> 
    <data android:mimeType="application/itunes"/> 
</intent-filter> 
0

प्रकट के बारे में CommonsWare जवाब के लिए अच्छा है और यह काम करता है।

"लेकिन जब मैं गीत का चयन करें और सूची से मेरी एप्लिकेशन का चयन करें, यह मेरी एप्लिकेशन को सफलतापूर्वक खोलता है लेकिन यह है कि चयनित गीत। क्या उस के लिए ऐसा करने के लिए ?? नहीं खेल" यदि आपके ऐप पृष्ठभूमि में नहीं है

में, अपनी गतिविधि OnCreate आप

Uri data = getIntent().getData() 
if (data!=null){/*use this Uri like you want*/} 

अपने अनुप्रयोग कर सकते हैं मामले में पृष्ठभूमि में आशय आप रोकना आप ovveride करने के लिए है कि विधि onNewIntent() से होकर गुजरेगी है।

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    /*...*/ 
    interceptExternalIntentAndPlaySongFromUri(getIntent()); 
} 

@Override 
protected void onNewIntent(Intent intent) { 
    interceptExternalIntentAndPlaySongFromUri(intent); 
} 

private boolean interceptExternalIntentAndPlaySongFromUri(Intent intent){ 
    Uri data = intent.getData(); 
    if (data != null && intent.getAction() != null && 
intent.getAction().equals(Intent.ACTION_VIEW)){  
     String scheme = data.getScheme(); 
     String filename = ""; 
     if ("file".equals(scheme)) { 
      filename = data.getPath(); 
     } else { 
      filename = data.toString(); 
     } 
     player.setDataSource(filename); 
     setIntent(new Intent());  //this is to remove the last intent 
//without the above line, last request is reloaded when the user open another app 
//and return in this 
     return true;  //has intercepted an external intent. so you can load this uri. 
    } 
    return false;   //has not intent to intercept 
} 
संबंधित मुद्दे