2016-11-01 6 views
11

음악 플레이어 앱을 만들고 음악 플레이어로 등록하고 싶습니다. 사용자가 노래를 클릭하여 연주 할 때 내 앱을 음악 플레이어 중 하나로 제안해야합니다. 나는 this guide을 따라 갔다.음악 플레이어로 등록하여 노래 재생

manifest.xml에 필요한 코드를 추가 한 후 내 앱만 제안합니다. 내 앱을 선택하면 아무 것도 재생되지 않습니다. 내가 선택한 노래를 재생하는 미디어 경로를 수신하는 주요 활동에 수신기와 같은 것이 있어야한다고 생각합니다. 그러나 이것을 구현하는 방법을 모르겠습니다.

내 manifest.xml에 코드를 다음 (참조) 추가 한 : 당신이 IntentFilters이 getIntent를 사용하여 추가 된 후에는

<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

아래의 코드를 사용해보십시오? 나는 그것이 당신이 원하는 것이라고 확신합니다. http://stackoverflow.com/a/33783826/7094632 – Gabe

+0

예 이것이 작동하지 않습니다. –

답변

1

는()를

@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

final class IntentHandler { 

    private static final String TAG = "IntentHandler"; 

    private IntentHandler() { 

    } 

    static void onActionView(@NonNull final Intent intent) throws IOException { 
     final Uri data = intent.getData(); 
     if (data == null) { 
      Log.w(TAG, "Intent data is null"); 
      throw new IOException("Intent data is null"); 
     } 

     final String scheme = data.getScheme(); 
     if (scheme == null) { 
      Log.w(TAG, "Uri scheme is null"); 
      throw new IOException("Uri scheme is null"); 
     } 
     switch (scheme) { 
      case "file": 
       playFile(data); 
       break; 

      case "content": 
       playContent(data); 
       break; 

      case "http": 
       playHttp(data); 
       break; 

      default: 
       Log.w(TAG, "Unhandled Uri scheme: " + scheme); 
       throw new IOException("Unhandled Uri scheme: " + scheme); 
     } 
    } 

    private static void playFile(@NonNull final Uri data) throws IOException { 
     Log.d(TAG, "playFile() path = " + data.getPath()); 
     // Play a plain file 
    } 

    private static void playContent(@NonNull final Uri data) throws IOException { 
     Log.d(TAG, "playContent() " + data); 
     // Use ContentResovler to query the Uri 
    } 

    private static void playHttp(@NonNull final Uri data) throws IOException { 
     Log.d(TAG, "playHttp() " + data); 
     // Play from network 
    } 
} 

"http"에 대해 ContentProvider 또는 네트워크에서 IntentFilter를 재생하는 것을 지원하지 않는 경우, 또는 "content"체계에 따라 달라집니다.

1

이러한 인 텐트 필터를 사용해 보셨습니까?

<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> 

그런 다음 활동 :

@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

이 노래는 메인 스레드에서 실행됩니다.

0

이를 시도

<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> 
관련 문제