2013-03-19 25 views
9

Ho un URL che sto sovrascrivendo nella mia app per Android. Facendo clic su un collegamento da un messaggio di posta elettronica a tale collegamento, viene visualizzata la finestra di dialogo Intent Chooser ("Completa questo utilizzo"). Tuttavia, facendo clic sullo stesso link (in un tag <a>) da Chrome (su Android 4), reindirmi a quell'URL e non offre lo Intent Chooser.Override url Android non funziona sul reindirizzamento

Se sostituisco il link nel tag <a> con un collegamento a Google Play Store (https://play.google.com) poi cliccando sul link si solleva di nuovo il Intent Chooser.

C'è qualcosa di speciale con Google Play Store e Chrome oppure ho fatto qualcosa di sbagliato durante la configurazione del mio URL? C'è qualcosa che posso fare in html per far funzionare questo?

Ecco il <intent-filter>

<activity 
    android:label="@string/app_name" 
    android:name="..." 
    > 
    <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.VIEW"/> 

     <category android:name="android.intent.category.DEFAULT"/> 
     <category android:name="android.intent.category.BROWSABLE"/> 

     <data android:scheme="https" 
       android:host="www.example.com" 
      /> 
     <data android:scheme="http" 
       android:host="www.example.com" 
      /> 
    </intent-filter> 
</activity> 

(Reindirizzamento all'URL, inoltre, non comparirà la finestra di dialogo Intent Chooser, ma ho pensato che la mia situazione esprime soprattutto più acutamente il mio problema.)

Anche di nota, mi Sono abbastanza sicuro che tutto funzionasse mentre il mio dominio era inattivo. Non appena il mio dominio è arrivato online, questo ha smesso di funzionare. Questo potrebbe essere un frutto della mia immaginazione perché al momento non ero concentrato al 100% su questo problema.

È possibile che Chrome tratti gli URL di Google Play Store in modo speciale, altrimenti attende una risposta non 200 da un URL prima di aprire lo Intent Chooser?

+0

Quale versione di Android è in esecuzione? Ti chiedi se non è correlato a questo bug: https://code.google.com/p/chromium/issues/detail?id=113140 –

+0

Questa è una buona scoperta. Sono in esecuzione 4.2.2 Ho anche trovato questo bug che potrebbe essere correlato: https://code.google.com/p/chromium/issues/detail?id=170925 ma il mio codice è diverso da un luogo che è facile da testare perché Dovevo tirarlo fuori dalla porta. Preparerò presto un test. – xbakesx

+0

@AlexFlorescu se scrivi una risposta spiegando che si tratta di uno di questi bug (ho anche pubblicato un nuovo bug che non è stato chiuso: https://code.google.com/p/chromium/issues/detail?id = 230104) Segnerò la tua risposta corretta. – xbakesx

risposta

1

potrebbe benissimo essere un vero e proprio/bug noto.

Quello che ho suggerito (ma che è ora chiuso così sembra sarebbe stato risolto per la versione che si sta cercando con): https://code.google.com/p/chromium/issues/detail?id=113140

Trovato/aperta da @xbakesk: https://code.google.com/p/chromium/issues/detail?id=170925 https://code.google.com/p/chromium/issues/detail?id=230104

Se si riscontrano altri bug, fammelo sapere nei commenti e aggiungerò o modificherò la mia risposta direttamente. Se i bug vengono chiusi, cercherò anche di aggiornare la risposta.

0

Non sono sicuro di poter aggiungere più di un elemento di dati a un filtro di intent. Vorrei utilizzare due diversi filtri intent per schemi diversi.

Se si ha il controllo sull'URL che si trova sulla pagina Web, è possibile modificare l'http al proprio protocollo personalizzato in modo che l'app si apra invece di chiedere tramite il browser web.

+1

Per questa pagina: http://developer.android.com/guide/components/intents-filters.html è possibile avere più '', vengono semplicemente combinati, anche se lo ammetterò in un modo non molto verbosamente documentato. Ciò non cambia nulla nel comportamento descritto. Per quanto riguarda il secondo punto, nel mio caso l'override di http è il requisito. – xbakesx

2

Ho armeggiato con un po 'di tempo e potrebbe essere più semplice mostrarvi un metodo che funziona. Funziona su un dispositivo con 2.3.4 e un dispositivo con 4.2.2, quindi penso che funzionerà sulla maggior parte dei dispositivi.

Ecco il mio filtro intenti il ​​file manifesto:

<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="realsimpleapps.com" android:pathPrefix="/acv/" /> 
</intent-filter> 

Ecco il mio file html:

<a href="http://realsimpleapps.com/acv/aThing">Click Me!</a> 

E nella mia attività principale Io lo uso per afferrare tutto quello che ho "athing" (sopra) impostato su:

Uri data = getIntent().getData(); 
if (data != null) { 
    List<String> params = data.getPathSegments(); 
    if (params != null) { 
     Log.d(tag, "Param 0: " + params.get(0)); 
    } 
} 

Ottenere quello funzionante, quindi aggiungere il secondo elemento dati al filtro intent. Se funziona ancora dopo, dovresti essere impostato.

Facci sapere come va.

db

+0

L'ho estratto in un solo elemento '' 'e ho esattamente la stessa situazione. Facendo clic su un link (al di fuori di Chrome) è presente una finestra di dialogo Intent Chooser che si apre aprendo la mia app come soluzione all'intento. Se faccio clic su un link da with-in Chrome, non c'è mai una finestra di dialogo Scelta intenzioni, Chrome gestisce solo l'URL. – xbakesx

Problemi correlati