Android'de SMS ve MMS Gönderme ve Alma (Kit Kat Android 4.4 öncesi)


131

SMS mesajlarını nasıl gönderip alacağımı buldum. SMS mesajları göndermek için sınıfın sendTextMessage()ve sendMultipartTextMessage()yöntemlerini aramam gerekiyordu SmsManager. SMS mesajları almak için AndroidMainfest.xmldosyaya bir alıcı kaydetmem gerekiyordu . Sonra. onReceive()Yöntemini geçersiz kılmam gerekti BroadcastReceiver. Aşağıda örnekler ekledim.

MainActivity.java

public class MainActivity extends Activity {
    private static String SENT = "SMS_SENT";
    private static String DELIVERED = "SMS_DELIVERED";
    private static int MAX_SMS_MESSAGE_LENGTH = 160;

    // ---sends an SMS message to another device---
    public static void sendSMS(String phoneNumber, String message) {

        PendingIntent piSent = PendingIntent.getBroadcast(mContext, 0, new Intent(SENT), 0);
        PendingIntent piDelivered = PendingIntent.getBroadcast(mContext, 0,new Intent(DELIVERED), 0);
        SmsManager smsManager = SmsManager.getDefault();

        int length = message.length();          
        if(length > MAX_SMS_MESSAGE_LENGTH) {
            ArrayList<String> messagelist = smsManager.divideMessage(message);          
            smsManager.sendMultipartTextMessage(phoneNumber, null, messagelist, null, null);
        }
        else
            smsManager.sendTextMessage(phoneNumber, null, message, piSent, piDelivered);
        }
    }

    //More methods of MainActivity ...
}

SMSReceiver.java

public class SMSReceiver extends BroadcastReceiver {
    private final String DEBUG_TAG = getClass().getSimpleName().toString();
    private static final String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
    private Context mContext;
    private Intent mIntent;

    // Retrieve SMS
    public void onReceive(Context context, Intent intent) {
        mContext = context;
        mIntent = intent;

        String action = intent.getAction();

        if(action.equals(ACTION_SMS_RECEIVED)){

            String address, str = "";
            int contactId = -1;

            SmsMessage[] msgs = getMessagesFromIntent(mIntent);
            if (msgs != null) {
                for (int i = 0; i < msgs.length; i++) {
                    address = msgs[i].getOriginatingAddress();
                    contactId = ContactsUtils.getContactId(mContext, address, "address");
                    str += msgs[i].getMessageBody().toString();
                    str += "\n";
                }
            }   

            if(contactId != -1){
                showNotification(contactId, str);
            }

            // ---send a broadcast intent to update the SMS received in the
            // activity---
            Intent broadcastIntent = new Intent();
            broadcastIntent.setAction("SMS_RECEIVED_ACTION");
            broadcastIntent.putExtra("sms", str);
            context.sendBroadcast(broadcastIntent);
        }

    }

    public static SmsMessage[] getMessagesFromIntent(Intent intent) {
        Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
        byte[][] pduObjs = new byte[messages.length][];

        for (int i = 0; i < messages.length; i++) {
            pduObjs[i] = (byte[]) messages[i];
        }
        byte[][] pdus = new byte[pduObjs.length][];
        int pduCount = pdus.length;
        SmsMessage[] msgs = new SmsMessage[pduCount];
        for (int i = 0; i < pduCount; i++) {
            pdus[i] = pduObjs[i];
            msgs[i] = SmsMessage.createFromPdu(pdus[i]);
        }
        return msgs;
    }

    /**
    * The notification is the icon and associated expanded entry in the status
    * bar.
    */
    protected void showNotification(int contactId, String message) {
        //Display notification...
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.myexample"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="17" />

    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.WRITE_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_MMS" />
    <uses-permission android:name="android.permission.WRITE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:debuggable="true"
        android:icon="@drawable/ic_launcher_icon"
        android:label="@string/app_name" >

        <activity
            //Main activity...
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            //Activity 2 ...
        </activity>
        //More acitivies ...

        // SMS Receiver
        <receiver android:name="com.myexample.receivers.SMSReceiver" >
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

    </application>
</manifest>

Ancak, benzer şekilde MMS mesajları gönderip alabileceğinizi merak ediyordum. Biraz araştırma yaptıktan sonra, bloglarda verilen birçok örnek basitçeIntent yerel Mesajlaşma uygulamasına geçer. Başvurumdan çıkmadan bir MMS göndermeye çalışıyorum. MMS gönderip almanın standart bir yolu yok gibi görünüyor. Bunu çalıştıran oldu mu?

Ayrıca, SMS / MMS ContentProvider'ın resmi Android SDK'nın bir parçası olmadığının farkındayım, ancak birinin bunu uygulayabileceğini düşünüyordum. Herhangi bir yardım çok takdir edilmektedir.

Güncelleme

MMS mesajlarını almak BroadcastReceiveriçin AndroidManifest.xmldosyaya bir ekledim

<receiver android:name="com.sendit.receivers.MMSReceiver" >
    <intent-filter>
        <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />

        <data android:mimeType="application/vnd.wap.mms-message" />
    </intent-filter>
</receiver>

MMSReceiver sınıfında, onReceive()yöntem yalnızca mesajın gönderildiği phoneNumber öğesini alabilir. Bir MMS'den medya ekine giden dosya yolu (resim / ses / video) veya MMS'deki metin gibi diğer önemli şeyleri nasıl alırsınız?

MMSReceiver.java

public class MMSReceiver extends BroadcastReceiver {
    private final String DEBUG_TAG = getClass().getSimpleName().toString();
    private static final String ACTION_MMS_RECEIVED = "android.provider.Telephony.WAP_PUSH_RECEIVED";
    private static final String MMS_DATA_TYPE = "application/vnd.wap.mms-message";

     // Retrieve MMS
    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();
        String type = intent.getType();

        if(action.equals(ACTION_MMS_RECEIVED) && type.equals(MMS_DATA_TYPE)){

            Bundle bundle = intent.getExtras();

            Log.d(DEBUG_TAG, "bundle " + bundle);
            SmsMessage[] msgs = null;
            String str = "";
            int contactId = -1;
            String address;

            if (bundle != null) {

                byte[] buffer = bundle.getByteArray("data");
                Log.d(DEBUG_TAG, "buffer " + buffer);
                String incomingNumber = new String(buffer);
                int indx = incomingNumber.indexOf("/TYPE");
                if(indx>0 && (indx-15)>0){
                    int newIndx = indx - 15;
                    incomingNumber = incomingNumber.substring(newIndx, indx);
                    indx = incomingNumber.indexOf("+");
                    if(indx>0){
                        incomingNumber = incomingNumber.substring(indx);
                        Log.d(DEBUG_TAG, "Mobile Number: " + incomingNumber);
                    }
                }

                int transactionId = bundle.getInt("transactionId");
                Log.d(DEBUG_TAG, "transactionId " + transactionId);

                int pduType = bundle.getInt("pduType");
                Log.d(DEBUG_TAG, "pduType " + pduType);

                byte[] buffer2 = bundle.getByteArray("header");      
                String header = new String(buffer2);
                Log.d(DEBUG_TAG, "header " + header);

                if(contactId != -1){
                    showNotification(contactId, str);
                }

                // ---send a broadcast intent to update the MMS received in the
                // activity---
                Intent broadcastIntent = new Intent();
                broadcastIntent.setAction("MMS_RECEIVED_ACTION");
                broadcastIntent.putExtra("mms", str);
                context.sendBroadcast(broadcastIntent);

            }
        }

    }

    /**
    * The notification is the icon and associated expanded entry in the status
    * bar.
    */
    protected void showNotification(int contactId, String message) {
        //Display notification...
    }
}

Android.provider.Telefon Dokümantasyonuna göre :

Yayın Eylemi: Cihaz tarafından yeni bir metin tabanlı SMS mesajı alındı. Amaç, aşağıdaki ekstra değerlere sahip olacaktır:

pdus- Bir Object[]of byte[]mesajı oluşturan PDU'lan içeren s.

Ekstra değerler kullanılarak elde edilebilir getMessagesFromIntent(android.content.Intent) Eğer bir BroadcastReceiver bu amacı işlerken bir hatayla karşılaşırsa, sonuç kodunu uygun şekilde ayarlaması gerekir.

 @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
 public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";

Yayın Eylemi: Cihaz tarafından yeni bir veri tabanlı SMS mesajı alındı. Amaç, aşağıdaki ekstra değerlere sahip olacaktır:

pdus- Bir Object[]of byte[]mesajı oluşturan PDU'lan içeren s.

Ekstra değerler getMessagesFromIntent (android.content.Intent) kullanılarak ayıklanabilir. Bir BroadcastReceiver bu amacı işlerken bir hatayla karşılaşırsa, sonuç kodunu uygun şekilde ayarlaması gerekir.

@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String DATA_SMS_RECEIVED_ACTION = "android.intent.action.DATA_SMS_RECEIVED";

Yayın Eylemi: Cihaz yeni bir WAP PUSH mesajı aldı. Amaç, aşağıdaki ekstra değerlere sahip olacaktır:

transactionId (Integer) - WAP işlem kimliği

pduType (Integer) - WAP PDU türü`

header (byte[]) - Mesajın başlığı

data (byte[]) - Mesajın veri yükü

contentTypeParameters (HashMap<String,String>) - İçerik türüyle ilişkili tüm parametreler (kodu WSP İçerik Türü başlığından çözülür)

Bir BroadcastReceiver bu amacı işlerken bir hatayla karşılaşırsa, sonuç kodunu uygun şekilde ayarlaması gerekir. ContentTypeParameters ekstra değeri, adlarıyla anahtarlanan içerik parametrelerinin haritasıdır. Atanmamış herhangi bir iyi bilinen parametrelerle karşılaşılırsa, haritanın anahtarı 'atanmamış / 0x ...' olacaktır, burada '...' atanmamış parametrenin onaltılık değeridir. Bir parametrenin Değeri Yok ise, haritadaki değer boş olacaktır.

@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String WAP_PUSH_RECEIVED_ACTION = "android.provider.Telephony.WAP_PUSH_RECEIVED";

2 numaralı güncelleme

Ben de ekstra geçmesine nasıl anladım var PendingIntentbir tarafından alınacak BroadcastReceiver: Android PendingIntent ekstralar, BroadcastReceiver tarafından alınmayan

Ancak, fazlalıklar SMSReceiver'a değil SendBroadcastReceiver'a aktarılır . Ekstra SMSReceiver'a nasıl aktarabilirim ?

3 numaralı güncelleme

MMS alma

Bu nedenle, daha fazla araştırma yaptıktan sonra, a ContentObserver. Bu şekilde, content://mms-sms/conversationsİçerik Sağlayıcıda herhangi bir değişiklik olup olmadığını tespit edebilir ve sonuç olarak gelen MMS'leri tespit etmenize olanak sağlar. İşte bulduğum işe yaraması için en yakın örnek: MMS alma

Ancak, değişken vardır mainActivityÇeşidi ServiceController. ServiceControllerSınıf nerede uygulanır? Kayıtlı birinin başka uygulamaları var ContentObservermı?

MMS gönderme

MMS göndermeye gelince, şu örnekle karşılaştım: MMS Gönder

Sorun şu ki, Android v4.2.2'de bulunan Nexus 4 cihazımda bu kodu çalıştırmayı denedim ve şu hatayı alıyorum:

java.lang.SecurityException: No permission to write APN settings: Neither user 10099 nor current process has android.permission.WRITE_APN_SETTINGS.

Hata , sınıfın yönteminde CarriersContentProvider'ı sorguladıktan sonra atılır .getMMSApns()APNHelper

final Cursor apnCursor = this.context.getContentResolver().query(Uri.withAppendedPath(Carriers.CONTENT_URI, "current"), null, null, null, null);

Görünüşe göre Android 4.2'de APN'leri okuyamıyorsunuz

İşlemleri gerçekleştirmek için (MMS göndermek gibi) mobil veri kullanan ve cihazda bulunan varsayılan APN ayarını bilmeyen tüm bu uygulamalar için alternatif nedir?

4 numaralı güncelleme

MMS gönderme

Bu örneği izlemeyi denedim: MMS gönder

@ Sam'in cevabında önerdiği gibi:

You have to add jsoup to the build path, the jar to the build path and import com.droidprism.*; To do that in android, add the jars to the libs directory first, then configure the project build path to use the jars already in the libs directory, then on the build path config click order and export and check the boxes of the jars and move jsoup and droidprism jar to the top of the build order.

Bu yüzden artık SecurityException hatalarını almıyorum. Şimdi Android KitKat üzerinde bir Nexus 5 üzerinde test yapıyorum. Örnek kodu çalıştırdıktan sonra, çağrıdan sonra bana bir 200 yanıt kodu veriyor

MMResponse mmResponse = sender.send(out, isProxySet, MMSProxy, MMSPort);

Ancak, MMS göndermeye çalıştığım kişiyi kontrol ettim. Ve MMS'i asla almadıklarını söylediler.


Bu eğiticiye daha önce bir göz attınız mı? maximbogatov.wordpress.com/2011/08/13/mms-in-android
HaemEternal

3
Evet bende var. Maxim'in cevabını bir araya getirmeye çalıştım ama işe yarayamıyorum. Android.provider.telephony dosyasını içe aktaran ve kullanımdan kaldırılmış gibi görünen birçok sınıf var.
toobsco42

Ve muhtemelen, @
Sahil'in

@ Sahil'in cevabına çok benzese de, bu cevabı nasıl bir araya getireceğimden emin değilim.
toobsco42

Merhaba @ toobsco42, yukarıda bahsettiğiniz tüm bu sorguların çözümünü bulabiliyor musunuz ..?
kamal_tech_view

Yanıtlar:


15

Yukarıda tanımladığınız sorunun aynısını yaşadım (t-mobile ABD'deki Galaxy Nexus), çünkü mobil veri kapalı.

Jelly Bean'de: Ayarlar> Veri Kullanımı> mobil veri

Bir MMS göndermek VEYA bir MMS almak için ÖNCE mobil veriyi açmam gerektiğini unutmayın. Mobil veri kapalı bir MMS alırsam, yeni bir mesajın bildirimini alacağım ve mesajı bir indirme düğmesiyle alacağım. Ancak önceden mobil veriye sahip değilsem, gelen MMS eki alınmayacaktır. Mesaj alındıktan sonra açsam bile.

Bazı nedenlerden dolayı, telefon sağlayıcınız MMS gönderip almanızı sağladığında, Wifi kullanıyor olsanız bile Mobil Veriyi etkinleştirmiş olmanız gerekir, Mobil Veri etkinleştirilmişse bile MMS alabilir ve gönderebilirsiniz. Wifi, cihazınızda internetiniz olarak gösteriliyor.

Bu gerçek bir acıdır, sanki sizde yokmuş gibi, Mesaj Mobil Verileri açarken bile çok takılabilir ve cihazın yeniden başlatılmasını gerektirebilir.


Ayrıca SMS ve MMS göndermenin arka planda tamamen farklı 2 şeyler olduğunu bilmelisiniz. MMS, metinle birlikte ek öğeler (Medya) göndermeyi gerektirdiğinden, daha çok internet tabanlı bir ağ hizmetidir. Verilen kod, test ettiğim birkaç cihazda iyi çalışıyor. ps: NOKIA bölümünü göz ardı edebilirsiniz.
Manan Sharma

Bu örneği çalıştırdığımda, LogCat'de şunu yazıyor: 02-24 13: 32: 40.872: V / SendMMSActivity (5686): TYPE_MOBILE_MMS bağlı değil, kefalet 02-24 13: 32: 40.882: V / SendMMSActivity (5686): type is TYPE_MOBILE_MMS değil, kefalet Ayrıca şunu da söylüyor: java.lang.SecurityException: APN ayarlarını yazma izni yok: Ne kullanıcı 10099 ne de geçerli süreç android.permission.WRITE_APN_SETTINGS'e sahip değil. Görünüşe göre bu sorguyu yürütemiyor: final Cursor apnCursor = this.context.getContentResolver (). Query (Uri.withAppendedPath (Carriers.CONTENT_URI, "current"), null, null, null, null); Nexus 4'te test
ediyorum

Ayrıca bu @Sahil'in sağladığı örnekle aynıdır.
toobsco42

7

Resmi api desteği yoktur, yani halk için belgelenmez ve kütüphaneler her an değişebilir. Uygulamadan ayrılmak istemediğinin farkındayım ama merak eden başka biri için bunu nasıl yapıyorsun?

public void sendData(int num){
    String fileString = "..."; //put the location of the file here
    Intent mmsIntent = new Intent(Intent.ACTION_SEND);
    mmsIntent.putExtra("sms_body", "text");
    mmsIntent.putExtra("address", num);
    mmsIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(fileString)));
    mmsIntent.setType("image/jpeg");
    startActivity(Intent.createChooser(mmsIntent, "Send"));

}

Mesajın teslimini takip etmek gibi şeyleri nasıl yapacağımı tam olarak çözmedim ama bu mesajın gönderilmesini sağlamalı.

Mms alındığı için sms ile aynı şekilde uyarı alabilirsiniz. Alıcıdaki amaç filtresi şöyle görünmelidir.

<intent-filter>
    <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
    <data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>

Bu sadece yerel Mesajlaşma uygulamasını başlatmıyor mu?
toobsco42

1
evet bunun için üzgünüm. Bunu nasıl yapacağını zaten bildiğini fark ettim. Yine de mms'yi nasıl alacağımı ekledim.
user1959417

Teşekkürler, kısa süre önce MMS'in bir kısmını uyguluyorum BroadcastReceiverve Intent Filtergönderdiklerinizi kullandım. Bu soruyu yakında güncelleyeceğim.
toobsco42

4

Apn ayarlarını yazma izniniz olmadan Android 4.0 api 14 veya üstü için bir mms göndermek için bu kitaplığı kullanabilirsiniz : Android'den mnc ve mcc kodlarını alın, sonra arayın

Carrier c = Carrier.getCarrier(mcc, mnc);
if (c != null) {
    APN a = c.getAPN();
    if (a != null) {
        String mmsc = a.mmsc;
        String mmsproxy = a.proxy; //"" if none
        int mmsport = a.port; //0 if none
    }
}

Bunu kullanmak için, derleme yoluna Jsoup ve droid prizma kavanozu ekleyin ve com.droidprism. *;


Hey @Sam, .jar dosyasını projeme ekledim ancak Carrier nesnesini başlatan satırda şu hatayı alıyorum: bu java.lang.NoClassDefFoundError: com.droidprism.Carrier size mi oluyor?
toobsco42

Hayır. Derleme yoluna jsoup, derleme yoluna jar eklemeniz ve com.droidprism'i içe aktarmanız gerekir. *; Cevabı düzenleyeceğim. Bunu android'de yapmak için, önce kavanozları libs dizinine ekleyin, ardından proje oluşturma yolunu, halihazırda libs dizininde bulunan kavanozları kullanacak şekilde yapılandırın, ardından derleme yolunda yapılandırmaya tıklayın ve dışa aktarın ve kavanozların kutularını işaretleyin ve taşıyın jsoup ve droidprism jar'i yapı sırasının en üstüne yerleştirin.
Sam Adamsh

Jsoup .jar eklenmesi, NoClassDefFoundError sorununu çözdü. Artık APN ayarlarını alabilirim. Bir sonraki adım, nasıl MMS gönderileceğini bulmaktır.
toobsco42

3

Android'de mms göndermek için herhangi bir sdk desteği olduğunu sanmıyorum. Buraya bak En azından henüz bulamadım. Ama bir adam ona sahip olduğunu iddia etti. Bu gönderiye bir göz atın.

Android uygulamamdan MMS gönder


Nokia uygulamasının androidbridge.blogspot.com gönderisinin yorumlarına baktım ve görünüşe göre pek çok kişi bunu cihazlarında çalıştırırken sorun yaşıyor.
toobsco42

@ toobsco42 Yani, henüz desteklenmemiş olabilir.
Sahil Mahajan Mj

-2

Hayal kırıklıklarını anlamıyorum. Neden bu amacı filtreleyen bir yayın alıcısı yapmıyorsunuz:

android.provider.Telephony.MMS_RECEIVED

Biraz daha kontrol ettim ve bunu almak için sistem düzeyinde erişime ihtiyacınız olabilir (köklü telefon).


3
Hey @ j2emanue, Sorun şu ki, bu amacı aldıktan sonra, MMS'in içeriğini gerçekte nasıl elde edeceksiniz? Bir MMS, resim ve metin içeriyorsa, bu bileşenleri nasıl çıkarırsınız.
toobsco42

ama şunu fark ettim ki, bunu şu şekilde yaparsanız elde edebileceğiniz fazladan bir bayt dizisi var .... bayt [] data = intent.getByteArrayExtra ("data"); Üzgünüm ama nasıl ayrıştıracağımı bilmiyorum.
j2emanue

onu ayrıştırabiliyorum. ancak alabildiğim tek şey, mms'nin kimden geldiği konu ve mms içeriğinin depolandığı içerik konumu. ancak bu url'ye erişilemiyor.
toobsco42

-2

SmsListenerClass

public class SmsListener extends BroadcastReceiver {

static final String ACTION =
        "android.provider.Telephony.SMS_RECEIVED";

@Override
public void onReceive(Context context, Intent intent) {

    Log.e("RECEIVED", ":-:-" + "SMS_ARRIVED");

    // TODO Auto-generated method stub
    if (intent.getAction().equals(ACTION)) {

        Log.e("RECEIVED", ":-" + "SMS_ARRIVED");

        StringBuilder buf = new StringBuilder();
        Bundle bundle = intent.getExtras();
        if (bundle != null) {

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

            SmsMessage[] messages = new SmsMessage[pdus.length];
            SmsMessage message = null;

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

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    String format = bundle.getString("format");
                    messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i], format);
                } else {
                    messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                }

                message = messages[i];
                buf.append("Received SMS from  ");
                buf.append(message.getDisplayOriginatingAddress());
                buf.append(" - ");
                buf.append(message.getDisplayMessageBody());
            }

            MainActivity inst = MainActivity.instance();
            inst.updateList(message.getDisplayOriginatingAddress(),message.getDisplayMessageBody());

        }

        Log.e("RECEIVED:", ":" + buf.toString());

        Toast.makeText(context, "RECEIVED SMS FROM :" + buf.toString(), Toast.LENGTH_LONG).show();

    }
}

Aktivite

@Override
public void onStart() {
    super.onStart();
    inst = this;
}

public static MainActivity instance() {
    return inst;
}

public void updateList(final String msg_from, String msg_body) {

    tvMessage.setText(msg_from + " :- " + msg_body);

    sendSMSMessage(msg_from, msg_body);

}

protected void sendSMSMessage(String phoneNo, String message) {

    try {
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(phoneNo, null, message, null, null);
        Toast.makeText(getApplicationContext(), "SMS sent.", Toast.LENGTH_LONG).show();
    } catch (Exception e) {
        Toast.makeText(getApplicationContext(), "SMS faild, please try again.", Toast.LENGTH_LONG).show();
        e.printStackTrace();
    }
}

Belirgin

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

<receiver android:name=".SmsListener">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.