Last Updated on 10 years by Mas Herdi
Saat ini sudah banyak aplikasi Android yang menggunakan fitur SMS atau pesan singkat untuk berbagai keperluan, salah satu yang sering ditemui misalnya sebagai sarana verifikasi pengguna. OS Android sendiri, karena mempunyai tingkat modularitas yang tinggi, sudah menyediakan interface dan kelas tertentu yang bisa kita gunakan apabila kita ingin mengintegrasikan layanan SMS ke dalam aplikasi yang kita buat. Bagaimanakah caranya? Mari kita simak postingan di bawah ini 😀
Mengirim SMS lewat aplikasi buatan kita di Android
Untuk dapat mengirim SMS lewat aplikasi Android buatan kita, ada tiga cara yang dapat dilakukan, yaitu menggunakan SMSManager, menggunakan smsto URI, dan menggunakan SMSView intent. Perbedaan di antara ketiga method tersebut akan dijelaskan di bawah ini :
- Menggunakan SMSManager
Metode yang pertama adalah dengan menggunakan SMSManager, yaitu sebuah class khusus yang ada di OS Android yang dikhususkan untuk mengakses fitur-fitur SMS di Android. Kita bisa menggunakan kelas tersebut untuk mengirim sebuah SMS ke nomor yang dituju. Ketika menggunakan SMSManager, SMS akan langsung dikirim dari dalam aplikasi kita, tanpa membutuhkan aplikasi SMS lain. Kodenya kurang lebih sebagai berikut :public void sendSmsByManager() { try { // Mengambil default instance dari SmsManager SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phoneNumber.getText().toString(), null, smsBody.getText().toString(), null, null); Toast.makeText(getApplicationContext(), "SMS Berhasil Dikirim!", Toast.LENGTH_LONG).show(); } catch (Exception ex) { Toast.makeText(getApplicationContext(),"Pengiriman SMS Gagal...", Toast.LENGTH_LONG).show(); ex.printStackTrace(); } }
Bisa dilihat, kode di atas sangatlah simple, kita hanya perlu memanggil satu method sendTextMessage(), dan kemudian memberikan parameter berupa nomor telepon tujuan, nomor telepon pengirim, isi SMS, intent yang akan dieksekusi apabila SMS berhasil terkirim/gagal, dan intent yang akan dieksekusi apabila SMS telah diterima. Namun untuk tutorial ini kita hanya perlu mengisikan nomor telepon tujuan, dan isi SMS saja.
- Menggunakan Send To Intent
Yang kedua adalah dengan menggunakan Intent Send To:public void sendSmsBySIntent() { // menambahkan phone number ke URI data Uri uri = Uri.parse("smsto:" + phoneNumber.getText().toString()); // membuat intent baru dengan ACTION_SENDTO Intent smsSIntent = new Intent(Intent.ACTION_SENDTO, uri); // menambahkan isi SMS pada field sms_body smsSIntent.putExtra("sms_body", smsBody.getText().toString()); try{ startActivity(smsSIntent); } catch (Exception ex) { Toast.makeText(MainActivity.this, "Pengiriman SMS Gagal...", Toast.LENGTH_LONG).show(); ex.printStackTrace(); } }
Dengan menggunakan Intent SENDTO, kita akan mengirim SMS menggunakan aplikasi eksternal. Apabila terdapat lebih dari 1 aplikasi SMS pada handphone (misal, Hangouts, SMS), maka kita akan diberikan pilihan aplikasi yang digunakan untuk mengirim SMS. Namun apabila hanya ada satu aplikasi SMS di HP, maka kita akan langsung masuk ke default SMS aplikasi di Android dan mengirim SMS dari sana.
- Menggunakan VIEW Intent
Cara yang ketiga adalah menggunakan VIEW Intent, hampir sama dengan cara nomor 2. Hanya saja dengan menggunakan View Intent kita akan langsung diarahkan ke aplikasi SMS default kepunyaan Android, dan kemudian mengirim SMS dari situ.public void sendSmsByVIntent() { Intent smsVIntent = new Intent(Intent.ACTION_VIEW); // hanya akan membuka aplikasi SMS/MMS default di Android smsVIntent.setType("vnd.android-dir/mms-sms"); // menambahkan nomor telepon dan isi SMS otomatis smsVIntent.putExtra("address", phoneNumber.getText().toString()); smsVIntent.putExtra("sms_body", smsBody.getText().toString()); try{ startActivity(smsVIntent); } catch (Exception ex) { Toast.makeText(MainActivity.this, "Pengiriman SMS Gagal...", Toast.LENGTH_LONG).show(); ex.printStackTrace(); } }
Yup, itulah tiga cara yang dapat kita gunakan untuk mengirim SMS menggunakan aplikasi Android buatan kita.
Untuk contoh aplikasinya, kita bisa memulai dengan membuat project Android di Android Studio terlebih dahulu.
Kemudian pada kelas MainActivity.java atau kelas utama di project kalian, replace dengan kode berikut :
package id.web.twoh.smssampleapp; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.telephony.SmsManager; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText phoneNumber; private EditText smsBody; private Button smsManagerBtn; private Button smsSendToBtn; private Button smsViewBtn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); phoneNumber = (EditText) findViewById(R.id.phoneNumber); smsBody = (EditText) findViewById(R.id.smsBody); smsManagerBtn = (Button) findViewById(R.id.smsManager); smsSendToBtn = (Button) findViewById(R.id.smsSIntent); smsViewBtn = (Button) findViewById(R.id.smsVIntent); smsManagerBtn.setOnClickListener(new OnClickListener() { public void onClick(View view) { sendSmsByManager(); } }); smsSendToBtn.setOnClickListener(new OnClickListener() { public void onClick(View view) { sendSmsBySIntent(); } }); smsViewBtn.setOnClickListener(new OnClickListener() { public void onClick(View view) { sendSmsByVIntent(); } }); } public void sendSmsByManager() { try { // Get the default instance of the SmsManager SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phoneNumber.getText().toString(), null, smsBody.getText().toString(), null, null); Toast.makeText(getApplicationContext(), "SMS Berhasil Dikirim!", Toast.LENGTH_LONG).show(); } catch (Exception ex) { Toast.makeText(getApplicationContext(),"Pengiriman SMS Gagal...", Toast.LENGTH_LONG).show(); ex.printStackTrace(); } } public void sendSmsBySIntent() { // add the phone number in the data Uri uri = Uri.parse("smsto:" + phoneNumber.getText().toString()); Intent smsSIntent = new Intent(Intent.ACTION_SENDTO, uri); // add the message at the sms_body extra field smsSIntent.putExtra("sms_body", smsBody.getText().toString()); try{ startActivity(smsSIntent); } catch (Exception ex) { Toast.makeText(MainActivity.this, "Pengiriman SMS Gagal...", Toast.LENGTH_LONG).show(); ex.printStackTrace(); } } public void sendSmsByVIntent() { Intent smsVIntent = new Intent(Intent.ACTION_VIEW); // hanya akan membuka aplikasi SMS/MMS default di Android smsVIntent.setType("vnd.android-dir/mms-sms"); // menambahkan nomor telepon dan isi SMS otomatis smsVIntent.putExtra("address", phoneNumber.getText().toString()); smsVIntent.putExtra("sms_body", smsBody.getText().toString()); try{ startActivity(smsVIntent); } catch (Exception ex) { Toast.makeText(MainActivity.this, "Pengiriman SMS Gagal...", Toast.LENGTH_LONG).show(); ex.printStackTrace(); } } }
Kalian bisa mengganti nama package-nya sesuai dengan nama package pada aplikasi kalian. Setelah itu, untuk layout-nya masukkan kode berikut pada file activity_main.xml :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/bg_main" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Lengkapi isian di bawah untuk mengirim SMS" android:textAppearance="?android:attr/textAppearanceMedium" /> <EditText android:id="@+id/phoneNumber" android:layout_width="fill_parent" android:layout_height="wrap_content" android:ems="10" android:hint="contoh: 082132312123" android:inputType="phone" /> <EditText android:id="@+id/smsBody" android:layout_width="fill_parent" android:layout_height="80dp" android:layout_marginBottom="30dp" android:hint="Isi SMS..." /> <Button android:id="@+id/smsManager" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Kirim SMS lewat SMS Manager" /> <Button android:id="@+id/smsSIntent" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Kirim SMS lewat SENDTO" /> <Button android:id="@+id/smsVIntent" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Kirim SMS lewat VIEW" /> </LinearLayout>
Yang terakhir, jangan lupa menambahkan permission berikut pada Android Manifest
<uses-permission android:name="android.permission.SEND_SMS" />
Jika sudah, tinggal dijalankan 🙂 Dan beginilah hasilnya :
Demo
Demikian, semoga membantu. Apabila ada yang belum jelas, silahkan bertanya di bagian komentar! 🙂
bisa minta kontaknya gak?…..
THANKS BRO …VIA BLUESTACKS N LANGSUNG INSTALL DI DEVICE VERSI JELLY BEAN JGA JALAN…
TUH BUAT NAMBAH FITUR BACA KONTAK GMNA YA BRO BIAR LEBIH SIMPLE LAGI TANPA INPUT NOMER HP TUJUAN (jika ga hafal nomer) BANTU YAA BROO ..BISA KONTAK FB Q ATO EMAIL Q BROO …THANKS BANGET BROO …….
mau tanya gan.
misal ane buat button dengan nama “hidup” kemudian ketika tombol hidup itu ditekan maka langsung mengirim sms ke nomor yg ditentukan dengan text tertentu, bisa tidak gan?
bisa banget bro, nomornya di set saja dengan nomor yang ditentukan begitu pun juga dengan textnya. Caranya sama seperti di atas
maaf mas..mau tanya
dbagian mananya ya untuk set no.hp sama sms nya ?
di EditText yang berada di bagian paling atas
berarti klau kita mau set nomer jadinya sperti ini bukan mas :
private EditText phoneNumber;
ini dirubah menjadi :
private EditText 08777….;
Benar kah mas ?
Mohon koreksinya
Bukan,
phoneNumber nya yang diassigne ke 08777… dst
kalo mau bikin otomatis kirim pesan dengan jangka waktu yang ditentukan gimana ya caranya?
bisa, dibikin pakai timer sist
kak, ini pakai database nggak yaa?
Endak
kok saya sdh coba tp ndak berhasil, salahnya dimn ya? mksh
wah saya juga nda tau… 🙂 coba cek di logcat nya
http://www.twoh.co/2013/02/mengatasi-force-close-pada-aplikasi-android-menggunakan-logcat/
Kalau mau tambah bisa pilih nomor dari kontak di bagian isi pesan (bukan no.tujuan) gimama gan?
Terimakasih sebelumnya
Bisa menggunakan tombol, namun prosesnya lumayan menantang karena perlu kelas khusus/contacts adapter untuk bisa mengakses nomor2 yang ada di contacts
malam,mau nanya app ini dapat berfungsi layaknya sms di hp hp ?
dan apakah menggunakan pulsa atau koneksi inet ya ?
thx
yup, benar sekali bapak Dadi.
Dan aplikasi ini tetap menggunakan pulsa SMS sebagaimana SMS pada umumnya.
Sama-sama 🙂
saya sudah berhasil membuat app nya tp pengiriman pesan nya selalu gagal kenapa ya kira kira ??
Harus dicoba di HP langsung gan… dan pastikan ada pulsanya
Bang saya tanya, saya ada tugas besar matkul telemetri. Saya membuat alat kontrol yang di monitoring lewat android. Saya sudah bisa mas monitoring alat lewat android. Yang saya mau tanyakan, bisa tidak mas ketika monitoring alat dalam keadaan bahaya langsung sms (broadcast) ke no user (sebagai peringatan bahaya) ? Terima kasih
Salam budi
Met siang gan, ane punya pertanyaan nih, bagaimana caranya supaya sms yang kita kirim tidak disimpan di dalam database pesan terkirim (sent messages)
Terima kasih atas jawabanya gan
mau nanya ni mas, kode program untuk mengirim ke 2 nomor sekaligus gimana ya mas? terima kasih mas.
udh berhasil, tapi no yg di tuju tidak dapat pesan, knpa ya
misi gan, saya sudah berhasil mencoba app di atas
tapi mohon maaf sebelumnya, bisa diberi solusi bagaimana caranya untuk setting keluar setelah mengirim pesan gan, agar tidak perlu menekan back berulang2 ?
terima kasih
mohon solusinya gan
Kalo itu bisa dikembangkan sendiri gan gampang kok caranya 🙂
source code java nya jadi gmna gan?
mau tanya gan.
misal ane buat button dengan nama “hidup” kemudian ketika tombol hidup itu ditekan maka langsung mengirim sms ke nomor yg ditentukan dengan text tertentu, bisa tidak gan?
source code java nya gmna soalnya aku nyoba di button error terus gan?
mohon pencerahanya.