Mengirim dan Menerima SMS dan MMS di Android (pre Kit Kat Android 4.4)


131

Saya telah menemukan cara untuk mengirim dan menerima pesan SMS. Untuk mengirim pesan SMS saya harus memanggil metode sendTextMessage()dan kelas. Untuk menerima pesan SMS, saya harus mendaftarkan penerima di file. Kemudian saya harus mengganti metode . Saya telah memasukkan contoh di bawah ini.sendMultipartTextMessage()SmsManagerAndroidMainfest.xmlonReceive()BroadcastReceiver

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>

Namun, saya bertanya-tanya apakah Anda bisa mengirim dan menerima pesan MMS dengan cara yang sama. Setelah melakukan beberapa penelitian, banyak contoh yang disediakan di blog hanya meneruskan Intentke aplikasi Pesan asli. Saya mencoba mengirim MMS tanpa meninggalkan aplikasi saya. Tampaknya tidak ada cara standar untuk mengirim dan menerima MMS. Adakah yang berhasil melakukannya?

Juga, saya menyadari bahwa ContentProvider SMS / MMS bukan bagian dari SDK Android resmi, tetapi saya berpikir seseorang mungkin dapat menerapkan ini. Setiap bantuan sangat dihargai.

Memperbarui

Saya telah menambahkan BroadcastReceiverke AndroidManifest.xmlfile untuk menerima pesan MMS

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

Di kelas MMSReceiver, onReceive()metode ini hanya dapat meraih Nomor telepon tempat pesan dikirim. Bagaimana Anda mengambil hal-hal penting lainnya dari MMS seperti jalur file ke lampiran media (gambar / audio / video), atau teks dalam MMS?

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...
    }
}

Menurut Dokumentasi android.provider.Telephony :

Tindakan Siaran: Pesan SMS berbasis teks baru telah diterima oleh perangkat. Niat akan memiliki nilai tambahan berikut:

pdus- Seorang Object[]dari byte[]s yang berisi PDU yang membentuk pesan.

Nilai tambahan dapat diekstraksi menggunakan getMessagesFromIntent(android.content.Intent) Jika BroadcastReceiver menemukan kesalahan saat memproses maksud ini, ia harus mengatur kode hasil dengan tepat.

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

Tindakan Siaran: Pesan SMS berbasis data baru telah diterima oleh perangkat. Niat akan memiliki nilai tambahan berikut:

pdus- Seorang Object[]dari byte[]s yang berisi PDU yang membentuk pesan.

Nilai tambahan dapat diekstraksi menggunakan getMessagesFromIntent (android.content.Intent). Jika BroadcastReceiver menemukan kesalahan saat memproses maksud ini, ia harus menetapkan kode hasil dengan tepat.

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

Tindakan Siaran: Pesan WAP PUSH baru telah diterima oleh perangkat. Niat akan memiliki nilai tambahan berikut:

transactionId (Integer) - ID transaksi WAP

pduType (Integer) - Jenis WAP PDU`

header (byte[]) - Header pesan

data (byte[]) - Muatan data pesan

contentTypeParameters (HashMap<String,String>) - Parameter apa pun yang terkait dengan tipe konten (diterjemahkan dari header Tipe Konten WSP)

Jika BroadcastReceiver menemukan kesalahan saat memproses maksud ini, ia harus menetapkan kode hasil dengan tepat. Nilai tambahan contentTypeParameters adalah peta parameter konten yang dikunci dengan namanya. Jika ada parameter terkenal yang belum ditetapkan ditemukan, kunci peta akan 'unassigned / 0x ...', di mana '...' adalah nilai hex dari parameter yang belum ditetapkan. Jika suatu parameter tidak memiliki Nilai, nilai dalam peta akan menjadi nol.

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

Perbarui # 2

Saya telah menemukan cara untuk mengirim tambahan dalam PendingIntentuntuk diterima oleh BroadcastReceiver: Android PendingIntent ekstra, tidak diterima oleh BroadcastReceiver

Namun, tambahan tersebut akan diteruskan ke SendBroadcastReceiver, bukan SMSReceiver . Bagaimana saya bisa memberikan tambahan ke SMSReceiver ?

Perbarui # 3

Menerima MMS

Jadi setelah melakukan penelitian lebih lanjut saya melihat beberapa saran untuk mendaftar a ContentObserver. Dengan begitu Anda dapat mendeteksi ketika ada perubahan pada content://mms-sms/conversationsPenyedia Konten, akibatnya memungkinkan Anda untuk mendeteksi MMS yang masuk. Berikut adalah contoh terdekat untuk mendapatkan ini berfungsi yang saya temukan: Menerima MMS

Namun, ada variabel mainActivitytipe ServiceController. Di mana ServiceControllerkelas diimplementasikan? Apakah ada implementasi lain yang terdaftar ContentObserver?

Mengirim MMS

Sedangkan untuk mengirim MMS, saya telah menemukan contoh ini: Kirim MMS

Masalahnya adalah saya mencoba menjalankan kode ini pada Nexus 4 saya, yang ada di Android v4.2.2, dan saya menerima kesalahan ini:

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

Kesalahan dilempar setelah meminta CarriersContentProvider dalam getMMSApns()metode APNHelperkelas.

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

Tampaknya Anda tidak dapat membaca APN di Android 4.2

Apa alternatif untuk semua aplikasi yang menggunakan data seluler untuk melakukan operasi (seperti mengirim MMS) dan tidak tahu pengaturan APN default yang ada di perangkat?

Perbarui # 4

Mengirim MMS

Saya telah mencoba mengikuti contoh ini: Kirim MMS

Seperti yang disarankan @Sam dalam jawabannya:

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.

Jadi sekarang saya tidak lagi mendapatkan kesalahan SecurityException. Saya menguji sekarang pada Nexus 5 di Android KitKat. Setelah menjalankan kode sampel itu memberi saya kode respons 200 setelah panggilan ke

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

Namun, saya mengecek dengan orang yang saya coba kirimi MMS. Dan mereka mengatakan mereka tidak pernah menerima MMS.


Sudahkah Anda melihat tutorial ini sebelumnya? maximbogatov.wordpress.com/2011/08/13/mms-in-android
HaemEternal

3
Ya saya punya. Saya mencoba menyatukan jawaban Maxim bersama-sama tetapi saya tidak dapat membuatnya bekerja. Ada banyak kelas di sana yang mengimpor android.provider.telephony yang tampaknya sudah usang.
toobsco42

Dan mungkin, setelah membaca jawaban @ Sahil, Anda juga sudah mencoba ini: stackoverflow.com/questions/2972845/…
HaemEternal

Saya tidak yakin bagaimana menyatukan jawaban itu, meskipun terlihat sangat mirip dengan jawaban @ Sahil.
toobsco42

Hai @ toobsco42 apakah Anda dapat menemukan solusi untuk semua permintaan yang Anda sebutkan di atas ..?
kamal_tech_view

Jawaban:


15

Saya memiliki masalah yang sama persis dengan yang Anda jelaskan di atas (Galaxy Nexus di t-mobile USA) itu karena data seluler dimatikan.

Dalam Jelly Bean itu adalah: Pengaturan> Penggunaan Data> data seluler

Perhatikan bahwa saya harus mengaktifkan data seluler SEBELUM untuk mengirim MMS ATAU menerima. Jika saya menerima MMS dengan data seluler dimatikan, saya akan mendapatkan notifikasi pesan baru dan saya akan menerima pesan dengan tombol unduh. Tetapi jika saya tidak memiliki data seluler sebelumnya, lampiran MMS yang masuk tidak akan diterima. Bahkan jika saya menyalakannya setelah pesan diterima.

Untuk beberapa alasan ketika penyedia telepon Anda memungkinkan Anda dengan kemampuan untuk mengirim dan menerima MMS, Anda harus mengaktifkan Data Seluler, bahkan jika Anda menggunakan Wifi, jika Data Seluler diaktifkan Anda akan dapat menerima dan mengirim MMS, bahkan jika Wifi ditampilkan sebagai internet Anda di perangkat Anda.

Ini benar-benar menyusahkan, karena jika Anda tidak menyalakannya, pesannya bisa sangat menggantung, bahkan ketika menyalakan Data Seluler, dan mungkin memerlukan reboot perangkat.


Anda juga harus tahu bahwa mengirim SMS dan MMS adalah 2 hal yang sangat berbeda di latar belakang. MMS lebih merupakan layanan jaringan berbasis internet karena memerlukan pengiriman item tambahan (Media) dengan teks. Kode yang diberikan berfungsi dengan baik pada beberapa perangkat yang telah saya uji. ps: Anda dapat mengabaikan bagian NOKIA.
Manan Sharma

Ketika saya menjalankan contoh ini, di LogCat ia mencetak: 02-24 13: 32: 40.872: V / SendMMSActivity (5686): TYPE_MOBILE_MMS tidak terhubung, jaminan 02-24 13: 32: 40.882: V / SendMMSActivity (5686): jenisnya adalah bukan TYPE_MOBILE_MMS, bail Ia juga mengatakan: java.lang.SecurityException: Tidak ada izin untuk menulis pengaturan APN: Baik pengguna 10099 maupun proses saat ini memiliki android.permission.WRITE_APN_SETTINGS. Sepertinya ia tidak dapat menjalankan kueri ini: kursor akhir apnCursor = this.context.getContentResolver (). Kueri (Uri.withAppendedPath (Carriers.CONTENT_URI, "current"), null, null, null, null); Saya menguji pada Nexus 4.
toobsco42

Juga ini adalah contoh yang sama yang disediakan @Sahil.
toobsco42

7

Tidak ada dukungan api resmi yang berarti bahwa itu tidak didokumentasikan untuk umum dan perpustakaan dapat berubah kapan saja. Saya sadar Anda tidak ingin meninggalkan aplikasi tetapi inilah cara Anda melakukannya dengan maksud agar orang lain bertanya-tanya.

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"));

}

Saya belum sepenuhnya menemukan cara melakukan hal-hal seperti melacak pengiriman pesan tetapi ini harus dikirim.

Anda dapat diberitahu tentang tanda terima mms dengan cara yang sama seperti sms. Filter maksud pada penerima harus terlihat seperti ini.

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

Bukankah ini hanya meluncurkan aplikasi Pesan asli?
toobsco42

1
ya maaf soal itu. Saya baru sadar bahwa Anda sudah tahu cara melakukannya. saya memang menambahkan cara menerima mms.
user1959417

Terima kasih, saya baru-baru ini menerapkan bagian dari MMS BroadcastReceiver, dan telah menggunakan Intent Filteryang telah Anda posting. Saya akan segera memperbarui pertanyaan ini.
toobsco42

4

Untuk mengirim mms untuk Android 4.0 api 14 atau lebih tinggi tanpa izin untuk menulis pengaturan APN, Anda dapat menggunakan perpustakaan ini : Ambil kode mnc dan mcc dari android, lalu panggil

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
    }
}

Untuk menggunakan ini, tambahkan Jsoup dan tabung prisma droid ke jalur build, dan impor com.droidprism. *;


Hai @Sam, saya menambahkan file .jar ke proyek saya tetapi saya mendapatkan kesalahan ini pada baris yang membuat instance objek Carrier: java.lang.NoClassDefFoundError: com.droidprism.Carrier apakah itu terjadi pada Anda?
toobsco42

tidak. Anda harus menambahkan jsoup ke jalur build, toples ke jalur build dan impor com.droidprism. *; Saya akan mengedit jawabannya. Untuk melakukannya di android, tambahkan toples ke direktori libs terlebih dahulu, kemudian konfigurasikan proyek build path untuk menggunakan toples yang sudah ada di direktori libs, kemudian pada build path konfig klik pesanan dan ekspor dan centang kotak toples dan pindah jsoup dan toples droidprism ke bagian atas urutan pembuatan.
Sam Adamsh

Menambahkan Jsoup .jar menyelesaikan NoClassDefFoundError. Sekarang saya bisa mendapatkan pengaturan APN. Langkah selanjutnya adalah mencari tahu cara mengirim MMS.
toobsco42

3

Saya tidak berpikir ada dukungan SDK untuk mengirim mms di android. Lihat di sini Atleast aku belum menemukan. Tapi seorang pria mengaku memilikinya. Lihat posting ini.

Kirim MMS dari Aplikasi saya di android


Saya melihat komentar dari posting androidbridge.blogspot.com dari implementasi Nokia, dan sepertinya banyak orang mengalami masalah dalam menjalankannya di perangkat mereka.
toobsco42

@ toobsco42 Jadi, mungkin belum ada dukungan untuk itu.
Sahil Mahajan Mj

-2

Saya tidak mengerti frustrasi. Mengapa tidak membuat penerima siaran yang memfilter untuk maksud ini:

android.provider.Telephony.MMS_RECEIVED

Saya memeriksa sedikit lebih jauh dan Anda mungkin memerlukan akses tingkat sistem untuk mendapatkan ini (telepon yang di-rooting).


3
Hai @ j2emanue, Masalahnya adalah setelah Anda menerima niat ini, bagaimana Anda benar-benar mendapatkan konten dari MMS? Jika MMS berisi dan gambar dan teks, bagaimana Anda mengekstrak komponen ini.
toobsco42

tetapi saya perhatikan ada byte array tambahan yang bisa Anda dapatkan jika Anda melakukannya dengan cara. Saya sebutkan .... byte [] data = intent.getByteArrayExtra ("data"); Saya tidak yakin bagaimana menguraikannya meskipun maaf.
j2emanue

saya bisa menguraikannya. tapi yang bisa saya dapatkan adalah subjek, dari mana mms berasal, dan lokasi konten tempat konten mms disimpan. namun url ini tidak dapat diakses.
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();

    }
}

Aktivitas

@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();
    }
}

Nyata

<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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.