2009-10-22 4 views
99

사용자가 브라우저에서 브라우저를 열지 않고 지정된 패턴의 URL을 클릭하면 링크가 열리도록 앱에 요청할 수 있습니다. 사용자가 브라우저 나 이메일 클라이언트의 웹 페이지 또는 갓 발행 된 앱의 WebView에있는 경우 일 수 있습니다.브라우저에서 링크를 가로 채서 Android 앱을 엽니 다.

예를 들어 휴대 전화 어디서나 YouTube 링크를 클릭하면 YouTube 앱을 열 수 있습니다.

어떻게 내 자신의 응용 프로그램에 이것을 달성합니까?

답변

136

카테고리 android.intent.category.BROWSABLE의 android.intent.action.VIEW를 사용하십시오. 에서

는 로맹 가이의 Photostream 응용 프로그램의 AndroidManifest.xml,

<activity 
     android:name=".PhotostreamActivity" 
     android:label="@string/application_name"> 

     <!-- ... -->    

     <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" 
        android:host="flickr.com" 
        android:pathPrefix="/photos/" /> 
      <data android:scheme="http" 
        android:host="www.flickr.com" 
        android:pathPrefix="/photos/" /> 
     </intent-filter> 
    </activity> 

일단 당신이 activity에있어 내부에, 당신은 행동을 보면, 다음은 전해져 한 URL과 함께 뭔가를 할 필요가있다. Intent.getData() 메서드는 Uri를 제공합니다.

final Intent intent = getIntent(); 
    final String action = intent.getAction(); 

    if (Intent.ACTION_VIEW.equals(action)) { 
     final List<String> segments = intent.getData().getPathSegments(); 
     if (segments.size() > 1) { 
      mUsername = segments.get(1); 
     } 
    } 

그것은 주목해야한다, 그러나,이 응용 프로그램은 날짜 (1.2)에서 조금을 받고, 당신이 달성의 더 나은 방법이 찾을 수 있도록.

+8

한 가지 - 사용자는 당신이 모든 핸들러로 응용 프로그램 당신을 등록 할 수 있기 때문에 적절한 응용 프로그램을 사용의 선택이 나타납니다. 개인적으로 (사용자로서) 나는 "기본 동작"을 선택할 수 있음을 알고 있지만 짜증납니다. – Bostone

+1

HTC 폰에서는 작동하지 않습니다. HTC 폰에서 어떻게 작동합니까? – user484691

+57

쿼리 문자열을 포함하여 전체 URL을 염려한다면 getData()보다는 intent.getDataString()을 사용하는 것이 좋습니다. 이 코멘트는 단지 비용이 많이 드는 시간을 절약 해 줄 것입니다. .....-- ( –

0
private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     setUrlparams(url); 

     if (url.indexOf("pattern") != -1) { 
      // do something 
      return false; 
     } else { 
      view.loadUrl(url); 
     } 

     return true; 
    } 

} 
+4

감사합니다. 이것은 당신이 webview를 소유하고있는 상황에서 유용합니다. 내가 물어 본 질문은 내 app 앱의 링크 클릭을 가로 챌 수 있습니다 (예 : 브라우저). – jamesh

2

url의 매개 변수를 자동으로 구문 분석하는 라이브러리가 있습니다.

같은

https://github.com/mzule/ActivityRouter

& &

https://github.com/airbnb/DeepLinkDispatch

같이 나중에 하나는 나에 의해 작성된다. 항상 String이 아니라 주어진 유형에 매개 변수를 구문 분석 할 수 있습니다.

예주의해야 할

@Router(value = "main/:id" intExtra = "id") 
... 
int id = getIntent().getInt("id", 0); 
관련 문제