2013-05-08 1 views
5

sto cercando di impostare un filtro intento di lanciare la mia attività quando l'utente fa clic sul seguente URI: example.com/pathA/pathB/#pathC/someGUID~~V~~singular~~3rdIntent Pathprefix filtro con '#' non funziona

così ho aggiunto il seguente codice XML per 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:host="example.com" 
     android:pathPrefix="/pathA/pathB/#pathC" 
     android:scheme="http" /> 
</intent-filter> 

sto pensando che char i '#' è pasticciano everthing up, ma ho provato sfuggire a questa char senza fortuna. Qualche idea?

UPDATE: quando ho detto "provato a fuggire" Intendevo usando cento codifica (# è uguale a% 23)

risposta

10

filtri Intent utilizzano UriMatcher per analizzare URI e determinare se v'è una corrispondenza. # è il carattere jolly URI per un numero come mostrato negli esempi in UriMatcher. Per lo UriMatcher source code, non esiste una sequenza di escape per sfuggire a un # in un URI. Pertanto è necessario utilizzare un altro simbolo non riservato (notare che * è anche riservato come carattere jolly per qualsiasi testo).

+0

Ciò significa che pathPattern non funzionerà neanche, giusto? –

+1

@ user1774914 - a destra - semplicemente non sembra essere un modo di gestire un URI con un '#' in esso. Si può certamente gestire '/ pathA/pathB /' e controllare manualmente il resto dell'URI per '# pathC', ma che apparirà al sistema che si gestisce anche un URI come'/pathA/pathB/pathD' – ianhanniballake

+0

The La cosa strana è che i documenti di Android dicono ... Perché '\' è usato come carattere di escape quando la stringa viene letta da XML (prima che sia analizzata come un pattern), sarà necessario eseguire una doppia escape: ad esempio, un letterale '*' verrebbe scritto come "\\ *" e un letterale '\' verrebbe scritto come "\\\\". Questo è fondamentalmente lo stesso di quello che avresti bisogno di scrivere se costruisci la stringa nel codice Java. – a54studio