Sebuah kasus yang sedang saya ingin ketahui adalah, bagaimana bisa aktivasi SMS salah satu sosial media bisa otomatis dibaca oleh aplikasinya. Nah waktunya untuk mencoba mengimplementasikan hal tersebut walau secara sederhana dan bukan buat aktivasi hanya intinya bagaimana mengirim SMS dari aplikasi kita, dan dapat membaca SMS secara otomatis pula dari aplikasi yang kita buat.
Langsung saja seperti biasa kita buat sebuah project dengan nama CobaSMS
Membuat Project SMS masrahman28.blogspot.com |
Pilih Jenis Activity masrahman28.blogspot.com |
Kirim SMS
Kita buka file activity_main.xml tambahkan satu buah EditText dan Button ya, jika nomor penerima ingin dinamis tinggal tambahkan lagi saja satu buah EditText untuk memasukan nomor penerima.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.cobasms.MainActivity"> <EditText android:id="@+id/isiSMS" android:layout_width="match_parent" android:layout_height="150dp" android:maxLength="160"/> <Button android:id="@+id/btnSend" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="SEND SMS"/> </LinearLayout>
Sudah selesai tampilan atau UI yang kita buat, saatnya kita membuat proses pengiriman SMS. Buka file ActivityMain.java
EditText etSMS; Button btnSend; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); etSMS = (EditText)findViewById(R.id.isiSMS); btnSend = (Button)findViewById(R.id.btnSend); btnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { SmsManager.getDefault().sendTextMessage("nomor HP tujuan", null, etSMS.getText().toString(), null, null); etSMS.getText().clear(); } }); }
dan Aplikasi kita sudah bisa untuk mengirim SMS nih. Mudah sekali kan ternyata, begitupun dengan cara untuk membaca SMS tidak akan begitu rumit. Kita lanjutkan ya
Membaca SMS
Agar aplikasi kita dapat membaca SMS masuk, kita membutuhkan sebuah class turunan dari BroadcastReceiver jadi langsung saja kita buat sebuah class yang akan menangani SMS-SMS yang masuk ke Mobile Android kita. Langsung saja kita buat sebuah class dengan nama SMSReceiver.java
Membaca SMS
Agar aplikasi kita dapat membaca SMS masuk, kita membutuhkan sebuah class turunan dari BroadcastReceiver jadi langsung saja kita buat sebuah class yang akan menangani SMS-SMS yang masuk ke Mobile Android kita. Langsung saja kita buat sebuah class dengan nama SMSReceiver.java
package com.example.cobasms; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.provider.Telephony; import android.telephony.SmsMessage; public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) { String smsBody = ""; String smsSender = ""; if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){ for (SmsMessage smsMessage : Telephony.Sms.Intents.getMessagesFromIntent(intent)) { smsSender = smsMessage.getDisplayOriginatingAddress(); smsBody += smsMessage.getMessageBody(); } }else{ Bundle smsBundle = intent.getExtras(); if (smsBundle != null) { Object[] pdus = (Object[]) smsBundle.get("pdus"); if (pdus == null) { System.out.println("null"); return; } SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < messages.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); smsBody += messages[i].getMessageBody(); } smsSender = messages[0].getOriginatingAddress(); } } //fungsi ini akan memfilter SMS yang masuk, jadi tidak semua nomor akan kita munculkan dialog if(smsSender.equals("nomor HP") || smsSender.equals("+nomor HP")){ AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setMessage("FROM "+smsSender + " ISI "+ smsBody); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); } }); builder.show(); } } } }
Nah untuk mengimplementasikan class SMSReceiver ini kita kembali lagi ke ActivityMain.java kita tambahkan dua buah method
Cara diatas akan membaca SMS hanya pada Activity tersebut aktif saja. Sebenarnya ada lagi cara lain yaitu dengan kita menambahkan atau mendaftarkan BroadcastReceiver kita di AndroidManifest.xml di dalam tag <application></application> dengan cara ini BroadcastReceiver akan terbaca oleh semua activity dari aplikasi yang dibuat tanpa harus melakukan register receiver di setiap class nya seperti yang saya lakukan, contohnya jika menyisipkan di Manifest
Jadi coding lengkapnya untuk ActivityMain.java akan menjadi seperti di bawah ini
Selesai sudah, aplikasi sudah bisa dijalankan. Dan ingat untuk merubah spesifikasi/filter nomor HP yang ada di SMSReceiver.java agar dialog muncul.
@Override protected void onResume() { super.onResume(); registerReceiver(receiver, new IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)); } @Override protected void onStop() { super.onStop(); unregisterReceiver(receiver); }
Cara diatas akan membaca SMS hanya pada Activity tersebut aktif saja. Sebenarnya ada lagi cara lain yaitu dengan kita menambahkan atau mendaftarkan BroadcastReceiver kita di AndroidManifest.xml di dalam tag <application></application> dengan cara ini BroadcastReceiver akan terbaca oleh semua activity dari aplikasi yang dibuat tanpa harus melakukan register receiver di setiap class nya seperti yang saya lakukan, contohnya jika menyisipkan di Manifest
<receiver android:name=".SMSReceiver" android:enabled="true" android:permission="android.permission.BROADCAST_SMS"> <intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>
Jadi coding lengkapnya untuk ActivityMain.java akan menjadi seperti di bawah ini
package com.example.cobasms; import android.content.IntentFilter; import android.provider.Telephony; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.telephony.SmsManager; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends AppCompatActivity { EditText etSMS; Button btnSend; SMSReceiver receiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); etSMS = (EditText)findViewById(R.id.isiSMS); btnSend = (Button)findViewById(R.id.btnSend); receiver = new SMSReceiver(); btnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { SmsManager.getDefault().sendTextMessage("nomor HP tujuan", null, etSMS.getText().toString(), null, null); etSMS.getText().clear(); } }); } @Override protected void onResume() { super.onResume(); registerReceiver(receiver, new IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)); } @Override protected void onStop() { super.onStop(); unregisterReceiver(receiver); } }
Selesai sudah, aplikasi sudah bisa dijalankan. Dan ingat untuk merubah spesifikasi/filter nomor HP yang ada di SMSReceiver.java agar dialog muncul.
infonya sangat bermanfaat bagi ane, thanks ya gan
BalasHapussolder blower 2in1