2009-10-22 13 views
99

Vorrei poter richiedere alla mia app di aprire un collegamento quando l'utente fa clic su un URL di un dato pattern invece di consentire al browser di aprirlo. Ciò potrebbe accadere quando l'utente si trova su una pagina Web nel browser o in un client di posta elettronica o all'interno di una WebView in un'app appena sfornata.Intercettare i collegamenti dal browser per aprire la mia app per Android

Ad esempio, fare clic su un collegamento YouTube da qualsiasi posizione nel telefono e ti verrà data la possibilità di aprire l'app YouTube.

Come ottengo ciò per la mia app?

risposta

136

Utilizzare un android.intent.action.VIEW della categoria android.intent.category.BROWSABLE.

Da Romain Guy Photostream di AndroidManifest.xml app,

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

Una volta dentro sei nel activity, è necessario guardare per l'azione, e poi fare qualcosa con l'URL che hai consegnato. Il metodo Intent.getData() ti dà un 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); 
     } 
    } 

Va notato, tuttavia, che questa applicazione sta diventando un po 'fuori data (1.2), quindi si possono trovare ci sono modi migliori per raggiungere tale obiettivo.

+8

Una cosa di essere a conoscenza di - Il tuo manuale sarà presentato con la scelta di utilizzare l'applicazione adatta in quanto tutto ciò che fai è quello di registrare la vostra app come un gestore. Personalmente (come utente) sono infastidito da questo, anche se mi rendo conto che posso optare per "azione predefinita" – Bostone

+1

Questo non funziona per i telefoni HTC. Come posso farlo funzionare su telefoni HTC? – user484691

+57

Probabilmente vorrai usare intent.getDataString() piuttosto che getData() se ti interessa l'URL completo inclusa la querystring. Questo commento ti farà risparmiare l'ora che mi è costato ..... :-( –

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

Grazie, questo è utile nel contesto in cui sei il proprietario della webview. La domanda che stavo ponendo era come ottenere la mia app intercettare un clic su un collegamento in qualsiasi app (ad es. il browser). – jamesh

Problemi correlati