Se si desidera utilizzare un servizio per eseguire azioni diverse, dichiarare un filtro di intenti aiuterà il servizio a confrontarsi con le diverse azioni che si desidera eseguire.
L'esempio spiegherà meglio.
Supponete di avere seguente dichiarazione nel file manifesto:
<service
android:name="MyService" >
<intent-filter>
<action android:name="com.x.y.DOWNLOAD_DATA" />
<action android:name="com.x.y.UPLOAD_DATA" />
</intent-filter>
</service>
Poi, nel tuo IntentService
si potrebbe filtrare per queste azioni di questo tipo:
public class MyService extends IntentService {
public MyService() {
super("MyService");
}
@Override
protected void onHandleIntent(Intent intent) {
if(intent.getAction().equals("com.x.y.DOWNLOAD_DATA"){
//download data here
}else if(intent.getAction().equals("com.x.y.UPLOAD_DATA"){
// upload data here
}
}
}
Fondamentalmente, essa consente di utilizzare lo stesso servizio per i diversi azioni, invece di creare due servizi separati, ad esempio.
Tuttavia, avendo filtri intenti dichiarati per un servizio non è considerato come una buona pratica, e questo è ciò che la documentazione avevano da dire:
Attenzione: Per garantire la vostra applicazione è sicura, utilizzare sempre un esplicito intent all'avvio di un servizio e non dichiarare filtri di intent per i servizi . L'utilizzo di un intento implicito per avviare un servizio è un pericolo di sicurezza perché non si può essere certi di quale servizio risponderà all'intento e l'utente non può vedere quale servizio verrà avviato.
fonte
2013-07-30 07:14:23
bella spiegazione –
Thanks it mi ha davvero aiutato !! – joseRo
Ma se avvio un servizio di questo tipo con un'azione che non è inclusa nel '', il servizio inizierà e farà il suo lavoro. Quindi, dovrebbe esserci qualcosa come 'if (action.equals (ACT_1)) {// Do task # 1} else if (action.equals (ACT_2)) {// Do task # 2} else {throw IllegalArgumentException (" Illegal azione "+ azione);}' –