2012-03-06 13 views
7

Ho un problema. Iam usando il codice seguente di interrompere link al mio app comelink di interruzione alla mia app

<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="twitter.com"/> 
    <data android:scheme="http" android:host="facebook.com"/> 
</intent-filter> 

Ma il problema è che ho bisogno di impostare schema dei dati e ospite in fase di esecuzione vale a dire che posso aggiungere o eliminare l'host in fase di esecuzione. Quindi, per favore qualcuno mi aiuti nella determinazione del valore di schema dei dati e ospite a runtime.I sto usando il codice qui sotto, ma non funziona

IntentFilter filter = new IntentFilter(); 
filter.addAction("android.intent.action.VIEW"); 
filter.addCategory("android.intent.category.DEFAULT"); 
filter.addCategory("android.intent.category.BROWSABLE"); 
filter.addDataScheme("http"); 
filter.addDataAuthority("www.facebook.com", null); 
RecieveBroadcaster receiver = new RecieveBroadcaster(); 
registerReceiver(receiver, filter); 
+0

can anobody please help me – saba

+0

Ho la risposta di questo, quindi se qualcuno ha bisogno di aiuto. ACTION.VIEW è un'azione di attività. Quindi non possiamo registrarlo con un ricevitore broadcast. Poiché il filtro intent non può essere impostato in fase di runtime (tranne nel caso di ricevitore broadcast). E il ricevitore broadcast può trasmettere solo azioni broadcast come android.intent.action.PHONE_STATE. Pertanto, la registrazione di AZIONE> VISTA non è consentita e il ricevitore di trasmissione non risponderà mai. – saba

risposta

4

A rigor di termini, la stringa corrispondente ad ACTION_VIEW è un'azione un'attività per convenzione ; il fatto che lo si inserisca nell'elemento intent-filter di un activity nel file manifest, rende un'azione di attività! Il sistema li ascolta per conto della tua applicazione, il che è fondamentalmente il motivo per cui non puoi (non puoi) ascoltarli tu stesso. Il metodo Context.startActivity() genera questi Intent s.

Le regole di risoluzione dell'intento determinano effettivamente se un particolare Intent corrisponde a qualsiasi IntentFilter s. Per gli intenti di attività, potrebbero esserci più corrispondenze e di solito viene visualizzata l'interfaccia "Scelta risorse", in modo che l'utente possa selezionare un obiettivo.

ci sono tre Intent "correnti" che non croce: startActivity(), sendBroadcast() e startService(). Questi sono tutti avviati tramite i metodi in Context e ognuno ha un target specifico Activity, BroadcastReceiver e Service rispettivamente.

Si tratta di una semplice questione di istituire un BroadcastReceiver (non ReceiveBroadcaster ha ancora di provare che il codice?) Per ottenere gli eventi a cui sei interessato, e quindi utilizzare Context.startActivity() con la Intent che si desidera. Puoi persino utilizzare un'azione personalizzata, in modo che tu sappia che è stata attivata dal ricevente e non dall'utente.

L'unica domanda è: c'è un evento di trasmissione che è possibile organizzare per ricevere? Potrebbe esserci un evento di sistema per cui è possibile registrarsi, oppure potresti essere tu stesso in grado di generare un evento personalizzato, tramite Context.sendBroadcast().

Ricordare che è possibile ispezionare l'ingresso Intent con l'attività avviata e "inoltrare" lo stesso Intent o se non corrisponde esattamente a quello che si sta cercando. Come hai determinato correttamente, non puoi modificare dinamicamente il set di attività di IntentFilter s, quindi dovrai ispezionare l'host di ogni richiesta.

Ricorda che puoi anche registrare i ricevitori nel tuo manifest, e avere quell'implementazione chiamata automaticamente dal sistema.

Problemi correlati