Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Intercepting links from the browser to open my Android app

I'd like to be able to prompt my app to open a link when user clicks on an URL of a given pattern instead of allowing the browser to open it. This could be when the user is on a web page in the browser or in an email client or within a WebView in a freshly-minted app.

For example, click on a YouTube link from anywhere in the phone and you'll be given the chance to open the YouTube app.

How do I achieve this for my own app?

like image 324
jamesh Avatar asked Oct 22 '09 19:10

jamesh


1 Answers

Use an android.intent.action.VIEW of category android.intent.category.BROWSABLE.

From Romain Guy's Photostream app's 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> 

Once inside you're in the activity, you need to look for the action, and then do something with the URL you've been handed. The Intent.getData() method gives you a 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);         }     } 

It should be noted, however, that this app is getting a little bit out of date (1.2), so you may find there are better ways of achieving this.

like image 113
jamesh Avatar answered Sep 20 '22 16:09

jamesh