A następnie przechodzimy do kodu: Obiekt klasy SmsManager to po prostu narzędzie służące do wysyła..."> A następnie przechodzimy do kodu: Obiekt klasy SmsManager to po prostu narzędzie służące do wysyła..." />

Obsługa SMS

Wysyłanie pojedynczego SMSa


Wysyłanie SMSów w Androidzie jest bardziej niż proste. Do pliku manifestu dodajemy odpowiednie uprawnienie:


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


A następnie przechodzimy do kodu:




Obiekt klasy SmsManager to po prostu narzędzie służące do wysyłania SMS. Znaczenia pozostałych 2 zmiennych – odbiorca i wiadomosc nie trudno jest się domyślić. Przyjrzyjmy się teraz liniom 22 i 23. Metoda getDefault oddaje nam instancję klasy SmsManager. Metoda sendTextMessage służy do wysyłania SMSów składających się z nie więcej niż 160 znaków – tj. pojedynczy sms. Istnieje też metoda „sendMultipartTextMessage” która umożliwia wysłanie tekstu na który składa się więcej niż jeden SMS. Pierwszy parametr metody sendTextMessage to numer telefonu odbiorcy,trzeci to treść wiadomości. Musimy pamiętać, że urządzenie z którego wysyłamy wiadomości musi posiadać kartę SIM :) 



Wysyłanie wieloczęściowego SMSa


Wysyłanie wieloczęściowego SMSa jest bardzo podobne do wysyłania pojedynczego, z tą różnicą że smsa trzeba po drodze podzielić na kilka fragmentów, ale nawet do tego mamy dedykowaną gotową metodę. Zacznijmy od dodania niezbędnego uprawnienia:


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


Potem przechodzimy do kodu:



Obiekt klasy SmsManager jest elementem wysyłającym smsy. Zmienna odbiorca to numer telefonu na który chcemy wysłać wiadomość. Lista elementów fragmenty, zdefiniowana jako pusta to pojemnik do którego wrzucona zostanie wiadomość SMS podzielona na fragmenty. Zmienna wiadomosc służy do tymczasowego przechowania wiadomości o długości większej niż 160 znaków. W metodzie onCreate , w linii 28 odbieram instancję klasy SmsManager. W linii 29 wykorzystuję metodę divideMessage której podaję długą wiadomość, a ta zwraca nam ją już podzieloną na fragmenty do pojemnika „fragmenty”. Samo wysłanie wiadomości to wywołanie metody sendMultipartTextMessage, której podaję  numer telefonu odbiorcy i wiadomość podzieloną na fragmenty. Po drodze (w linii 30) wyświetlam ilość elementów jakie wyjdą z naszej wiadomości. 
Wyszły mi cztery, co widać na poniższym obrazku:



Wiadomość przychodzi jako całość. Pamiętamy oczywiście o włożeniu karty SIM do urządzenia z którego chcemy wysyłać smsy, ponieważ wbrew pozorom nie jest to metoda na darmowe wysyłanie smsów ;)


Odbieranie SMSów

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