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 :)

7 komentarzy:

  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ń
  3. W jaki sposób można "wyłuskać" numer telefonu otrzymanego sms-a? Tworzę apk-ę do sterowania za pomocą sms-ów. Mogę zaszyfrować wiadomość dodać jakiś nagłówek ale pewnie można sprawdzić nadawcę, żeby aplikacja tylko te brała pod uwagę.

    OdpowiedzUsuń
  4. 37 year old Executive Secretary Bar Nevin, hailing from Rimouski enjoys watching movies like My Gun is Quick and Poi. Took a trip to Madara Rider and drives a Eldorado. moja strona

    OdpowiedzUsuń
  5. Wygląda to wszystko bardzo ciekawie

    OdpowiedzUsuń
  6. Ten wpis to prawdziwa skarbnica wiedzy.

    OdpowiedzUsuń