poniedziałek, 17 lutego 2014

Odbieranie SMSów


Kod źródłowy do tej lekcji znajduje się tutaj. Rozpakuj go i zaimportuj. W katalogu z kodem źródłowym znajdą się podkatalogi oznaczone numerami. Są to po prostu kolejne wersje kodu, tworzonego w ramach przykładów. Możesz analizować kolejne kroki tworzenia aplikacji, lub od razu zabrać się za kod z katalogu o najwyższym numerku.



Jeśli chcemy napisać aplikację która będzie reagowała na nadejście SMS, musimy ją zarejestrować jako taki odbiornik i w ten sposób zdeklarować że potrafi obsługiwać takie akcje. W tym celu,gdzieś pomiędzy tagami <Application> w pliku manifestu musimy wstawić taki fragment:

<receiver android:name=".OdbiornikSMS" android:enabled="true">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>

Oczywiście w pierwszej linii podajemy nazwę swojej klasy która ma sesemesy odbierać. Wstawiając taki kawałek kodu do naszego pliku manifestu, deklarujemy że nasz program potrafi obsługiwać pewne operacje – np. w tym przypadku android.provider.Telephony.SMS_RECEIVED, ale równie dobrze może to być odbieranie nadchodzących połączeń czy obsługa wywołań otwarcia strony internetowej.
Skoro deklarujemy, że jesteśmy w stanie obsługiwać odbieranie sms, to musimy jeszcze mieć do tego uprawnienia ;) Pamiętamy więc o dodaniu takiej linii do pliku manifestu:

<uses-permission android:name="android.permission.RECEIVE_SMS"/>


Jeszcze kodzik który to wszystko obsłuży:




Musimy zaimplementować interfejs BroadcastReceiver i posiadać metodę onReceive w której określimy co ma się zdarzyć przy odbieraniu sms. Nie musisz się martwić że od teraz nasza aplikacja „zasłoni” domyślną obsługę odbierania smsów. Platforma Android w momencie odebrania SMS wywoła wszystkie aplikacje zarejestrowane jako odbiorniki smsów :)
Taką funkcjonalność można fajnie wykorzystać do stworzenia systemu zarządzanego z dowolnego miejsca na ziemi poprzez SMS :)

3 komentarze:

  1. witam. W jaki sposób odczytać wszystkie smsy w skrzynce odbiorczej?

    OdpowiedzUsuń
  2. Mam aplikację SMSSecure do wysyłania i odbierania SMS-ów z funkcją szyfrowania, aby nawet operator nie miał do nich dostępu. Aplikacja jest darmowa i open-source. Aby odbierać wiadomości w tle, trzeba ją ustawić jako domyślną aplikację do tego celu. Jednak w moim LG Spirit pojawia się pewien problem: kiedy używam SMSSecure, niektóre wiadomości dochodzą dopiero po otwarciu tej aplikacji, a nawet wcale. Wie ktoś, jak rozwiązać ten problem?

    OdpowiedzUsuń
    Odpowiedzi
    1. Pewnie już rozwiązałeś ten problem, więc to bedzie coś w stylu pytania.
      Czy błędem było to, że w kodzie nie było coś w stylu, żeby program działał w tle?

      Usuń