10

오디오 파일 (예 : 파일 브라우저 또는 Gmail 첨부 파일)을 열려고 할 때 나타나는 팝업 목록에서 내 앱을보고 싶습니다 ("계속 사용하는 동작 ...").). 여기 내 MainActivity를 위해 시도한 텐트 필터는 다음과 같습니다 도와음악 플레이어로 등록

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

감사합니다! startActivity()에 사용되는 Intent에 적어도 하나 개의 카테고리는 항상 존재로

+0

이봐,이 대답은 나를 위해 잘 작동 : 여기

는 완전한 코드 예입니다. 그러나 노래를 선택하고 목록에서 내 앱을 선택하면 내 앱이 성공적으로 열리지 만 선택한 노래는 재생되지 않습니다. 그것을 위해 무엇을해야 하느냐? 도와주세요! –

답변

13

당신은 항상 <activity><intent-filter><category>이 필요합니다.

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

두 가지 질문 ... 우리가 mp3 파일의 기본값이되기를 원한다면 ... 모든 오디오 파일이 아니라 ... 질문 2, 활동에서 파일 정보/경로를 얻는 방법은 무엇입니까? – DeNitE

+0

@DeNitE : "우리가 mp3 파일의 기본값으로 만 사용하고 싶다면 어떻게해야합니까?"- 사용자가 기본값으로 설정하지 않는 한, 기본값으로 사용하지 않을 것입니다. 사용자는''요소 집합을 통해 지원하도록 선택한'Intent' 구조체의 기본값을 만들도록 선택할 수 있습니다. "활동에서 파일 정보/경로를 얻는 방법은 무엇입니까?" - 활동을 시작하는 데 사용 된'Intent '를 검색하기 위해'getIntent()'를 호출하십시오. 그것은 파일이 아니며 보통 ('content :'스키마가 더 가능성이 높습니다). – CommonsWare

+0

오케이, 그게 말이 되네. 다시 말하자면 ... 우리는 단지 오디오 파일이 아닌 mp3 파일 만 지원하기를 원했던가? – 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

Manifest에 관한 CommonsWare 대답은 훌륭하고 작동합니다.

"나는 노래를 선택하고 목록에서 내 응용 프로그램을 선택하면, 그것은 성공적으로 내 응용 프로그램을 엽니 다하지만 선택된 곡. 그것을 위해 무엇을 할 수? 재생되지"앱이 배경에 없으면

을,에 당신이 경우 귀하의 응용 프로그램을

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

을 할 수있는 한 OnCreate 활동 백그라운드에서 당신이 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 
}