Jeśli chcesz użyć usługi do wykonywania różnych czynności, deklarowanie filtra intencji pomoże dopasować usługę do różnych działań, które chcesz wykonać.
Przykład wyjaśni lepiej.
Załóżmy, że po deklaracji w pliku manifestu:
<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>
Następnie w IntentService
można filtrować za tymi działaniami tak:
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
}
}
}
Zasadniczo, to pozwala na wykorzystanie tej samej usługi dla różnych działania, zamiast tworzyć na przykład dwie oddzielne usługi.
Jednakże mając filtry zamiarom zadeklarowane za usługę nie jest uważany za dobrą praktykę, i to docs miał powiedzieć:
Uwaga: Aby zapewnić aplikacja jest bezpieczna, zawsze używać jawne intencją przy rozpoczynaniu usługi i nie deklaruj filtrów intencji dla swoich usług . Używanie ukrytego zamiaru uruchomienia usługi jest zagrożeniem, ponieważ nie można mieć pewności, jaka usługa będzie odpowiadać intencji , a użytkownik nie będzie widział, która usługa jest uruchamiana.
ładny wyjaśnieniu –
Dziękujemy naprawdę mi pomogło !! – joseRo
Ale jeśli uruchomię taką usługę z akcją, która nie jest zawarta w '', usługa uruchomi się i wykona swoje zadanie. Powinno być coś takiego: 'if (action.equals (ACT_1)) {// Zadanie nr 1} else if (action.equals (ACT_2)) {// Zadanie nr 2} else {throw IllegalArgumentException (" Nielegalne akcja "+ akcja);}' –