2016-11-01 10 views
11

Tworzę aplikację odtwarzacza muzyki i chcę zarejestrować ją jako odtwarzacz muzyki. Tak więc, gdy użytkownik kliknie na którąkolwiek piosenkę, moja aplikacja powinna zostać zasugerowana jako jeden z odtwarzaczy muzycznych. Poszłam za this guide.Zarejestruj się jako odtwarzacz muzyki i graj piosenkę

Po dodaniu niezbędnego kodu w pliku manifest.xml pokazuje on tylko moją aplikację w sugestiach. Po wybraniu aplikacji nic nie jest odtwarzane. Myślę, że w głównej działalności powinno być coś takiego, jak odbiornik, aby odebrać ścieżkę medialną, aby odtworzyć wybraną piosenkę. Ale nie wiem, jak to wdrożyć.

Dodałem następujący kod do mojego manifest.xml (dla porównania):

<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

Próbował pan jest? Jestem pewien, że tego właśnie chcesz. http://stackoverflow.com/a/33783826/7094632 – Gabe

+0

tak to nie działa –

Odpowiedz

1

Po Dodano IntentFilters używać getIntent(), aby uzyskać dane z niego

@Override 
protected void onCreate(@Nullable final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    handleIntent(getIntent()); 
} 

@Override 
protected void onNewIntent(final Intent intent) { 
    super.onNewIntent(intent); 
    setIntent(intent); 
    handleIntent(intent); 
} 

private void handleIntent(@NonNull final Intent intent) { 
    if (Intent.ACTION_VIEW.equals(intent.getAction())) { 
     try { 
      IntentHandler.onActionView(intent); 
     } catch (IOException e) { 
      // Handle error 
     } 
    } 
} 

IntentHandler. java

Jeśli nie obsługujesz gry z ContentProvider lub z sieci, usuń IntentFilter dla "http" lub odpowiednio "treść" z AndroidManifest.xml

1

Czy wypróbowałeś te filtry intencji?

<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="file"/> 
    <data android:scheme="content"/> 
    <data android:host="*"/> 
    <data android:mimeType="audio/*"/> 
    <data android:mimeType="application/ogg"/> 
    <data android:mimeType="application/x-ogg"/> 
    ... 
</intent-filter> 
<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="file"/> 
    <data android:scheme="content"/> 
    <data android:host="*"/> 
    <data android:pathPattern=".*\.mp3"/> 
    <data android:pathPattern=".*\.ogg"/> 
    <data android:pathPattern=".*\.wav"/> 
    <data android:pathPattern=".*\.wma"/> 
    <data android:pathPattern=".*\.flac"/> 
    ... 
</intent-filter> 
<intent-filter> 
    <action android:name="android.intent.action.GET_CONTENT" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="audio/*"/> 
</intent-filter> 

Następnie w swojej działalności:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ super.onCreate(savedInstanceState); 

    ... 

    Intent i = getIntent(); 
    Uri u = i.getData(); 
    String a = i.getAction(); 

    if ((u != null) && (a != null) && (a.equalsIgnoreCase("android.intent.action.VIEW"))) 
    { String filename = null; 

     if (i.getScheme().equalsIgnoreCase("file")) 
     { filename = u.getPath(); 
     } 
     else if (i.getScheme().equalsIgnoreCase("content")) 
     { try 
      { String[] filepathcolumn = {MediaStore.Audio.Media.DATA}; 
       Cursor cursor1 = getContentResolver().query(u, filepathcolumn, null, null, null); 
       cursor1.moveToFirst(); 
       int columnindex1 = cursor1.getColumnIndex(filepathcolumn[0]); 
       filename = cursor1.getString(columnindex1); 
       cursor1.close(); 
      } 
      catch (Exception e) 
      { e.printStackTrace(); 
      } 
     } 

     if (filename != null) 
     { ... 
     } 
    } 

}

0

Chyba tylko określić domyślny odtwarzacz muzyki, gdy utwór jest wybrany w pliku manifestu, a także napisać kod dla usługi które działają w głównym wątku , aby odtworzyć utwór.

0

Spróbuj użyć poniższy kod

<intent-filter> 
       <action android:name="android.intent.action.VIEW"/> 
       <category android:name="android.intent.category.DEFAULT"/> 
       <data android:scheme="file" android:mimeType="audio/*" /> 
    </intent-filter> 
0
 <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>