Android sms okumak ve sms yayın alıcılar

Mobil uygulamalarınız da bir sms ile geldiğinde bir işi tetiklemek istediğinizde sms yayın alıcılar kullanılır.Gelen sms in içeriği göndereni gibi verilere de erişmeye olanak verir.Bu yazının konusu gelen kutusundaki kısa mesajları okumak değil bir kısa mesaj geldiğinde tetiklenen bir uygulama geliştirmektir.Bu gibi durumlara genelde bankacılık uygulamalarında rastlarsınız banka size onay kodu gönderdiğinde bu onay kodu kısa mesaj içerisinden okunur ve ekranda gerekli alanlara otomatik olarak eklenir,buna benzer bir uygulama geliştireceğiz.

İlk olarak bir sınıf tanımlayacağız ve bu sınıfımızı BroadcastReceiver dan kalıtacağız. Bu sınıf bizim için sisteme bir sms geldiğinde tetiklenecek, gelen mesaj içeriğini ve göndereni toast mesaj olarak görüntüleyecek (uygulama arkaplanda çalışıyor olsa bile) ve bir mesaj sesi oynatacağız.

package mesutpiskin.com.smsyayinalicilari

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

/**
 * Created by meSutPc 
*/
public class SmsTrigger extends BroadcastReceiver {

    
    final SmsManager sms = SmsManager.getDefault();

    public void onReceive(Context context, Intent intent) {

        
        final Bundle bundle = intent.getExtras();

        try {

            if (bundle != null) {

                final Object[] pdusObj = (Object[]) bundle.get("pdus");

                for (int i = 0; i < pdusObj.length; i++) {

                    SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                    String phoneNumber = currentMessage.getDisplayOriginatingAddress();

                    String senderNum = phoneNumber;
                    String message = currentMessage.getDisplayMessageBody();

                    int duration = Toast.LENGTH_LONG;

                  
                        Toast toast = Toast.makeText(context,
                              "Sms Gönderen"+ senderNum+" Sms içeriği:"  + message, duration);
toast.show();
                        //Zil sesini çal
                        Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
                        Ringtone r = RingtoneManager.getRingtone(context, notification);
                        r.play();
                    

                }
            }

        } catch (Exception e) {
            Log.e("smstrigger", "Exception" + e);

        }
    }
}

Birde son olarak manifest dosyamıza bir ekleme yapacağız. Sınıfımızı receiver olarak tanıtmamız gerekiyor,bunu da manifest dosyasına application etiketi arasına aşağıdaki alanı ekleyerek tamamlıyoruz.

 <receiver android:name=".SmsTrigger" >
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

ve manifest dosyasına gerekli izinleride ekleyelim

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