Mengirim SMS

Setelah kita berlatih dasar-dasar membuat app Android, hal berikutnya yang menarik adalah bahwa kita bisa menambahkan app kita kemampuan berkomunikasi dengan dunia luar. Kita mungkin ingin app kita mengirim SMS ke handphone lain ketika ada suatu hal tertentu, misalnya ketika berada di lokasi tempat tertentu, atau kita mungkin ingin mengakses suatu web service yang menyediakan layanan tertentu, misalnya infomasi cuaca, kurs mata uang, dll.

Dalam topik ini kita akan berlatih bagaimana mengirim dan menerima SMS melalui program dari app Android kita. Kita juga akan belajar bagaimana memanggil app Mail dari app Android kita untuk mengirim email ke orang lain pada latihan berikutnya.

SMS

SMS adalah salah satu app favorit pada handphone, bahkan untuk beberapa pengguna sama pentingnya dengan telephone itu sendiri. Handphone apapun yang kita beli saat ini pasti bisa digunakan untuk mengirim sms, dan hampir semua pengguna dari segala umur tahu bagaimana mengirim dan menerima sms. Android sudah memiliki app SMS yang sudah 'built-in' yang memungkinkan kita mengirim dan menerima sms. Tetapi, dalam beberapa hal kita mungkin ingin meng-integrasikan kemampuan SMS ke dalam app Android kita. Contohnya, kita mungkin ingin membuat app yang secara otomatis mengirim sms secara regular dengan interval waktu tertentu. misalkan, kita ingin melacak lokasi anak-anak ketika berjauhan, cukup berikan saja perangkat Android yang mengirinkan sms yang berisi lokasi mereka setiap 30 menit, dan hal ini mungkin akan sangat berguna bagi orang tua. Jadi kita bisa tahu apakah mereka benar-benar pergi ke perpusatakaan setelah sekolah atau tidak. Tentu saja, app seperti ini juga akan dikenai biaya mengirim sms-sms tersebut. Kabar baiknya adalah bahwa untuk membuat app dari Android Studio kita tidak memerlukan perangkat riil untuk menguji sms. Android emulator sudah memberikan kemampuan untuk mencoba hal ini.

Latihan berikut ini akan mencoba mengirim dan menerima sms melalui program dari app kita. Jadi app kita akan secara otomatis mengirim sms ke penerima tanpa campurtangan pengguna.


1. Buat project baru dengan nama SMS.

2. File layout xml: 'activity_main.xml'.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context="com.example.sms.MainActivity">

<Button
android:id="@+id/btnSendSMS"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Send SMS"
android:onClick="onClick"/>
</LinearLayout>
3. Tambahkan permission pada file 'AndroidManifest.xml' seperti berikut:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sms"> 
<uses-permission android:name="android.permission.SEND_SMS" /> 
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> 
</manifest>

4. File 'MainActivity.java':
package com.example.sms; 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.telephony.SmsManager;
import android.view.View;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void onClick(View v) {
sendSMS("5556", "Selamat pagi semua...");
}

/*--kirim sms ke perangkat lain--*/
private void sendSMS(String nomorHp, String pesan) {
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(nomorHp, null, pesan, null, null);
}
}

5. Jalankan app tersebut di Android emulator. Kemudian jalankan emulator yang lain dari AVD manager. Kemudian pada emulator pertama (5554), klik tombol 'Send SMS' untuk mengirim SMS ke emulator kedua (5556). Silahkan lihat gambar berikut di bawah ini.

Emulator 1 mengirim sms ke emulator 2

Penjelasan

Android menggunakan 'policy' berbasis 'permission' dimana semua 'permission' yang diperlukan suatu app harus ditentukan di dalam file 'AndroidManifest.xml'. Ini akan memastikan bahwa ketika app di-install, pengguna akan tahu dengan tepat 'permission' mana yang akan diminta.

Karena mengirim sms akan memerlukan biaya tambahan di sisi pengguna, maka dengan menunjukkan 'permission' pada file 'AndroidManifest.xml' akan membantu pengguna untuk memutuskan apakah akan mengijinkan app di-install atau tidak.

Untuk mengirim sms melalui program, kia menggunakan class 'SmsManager'. Tidak seperti class-class lainnya, kita tidak perlu secara langsung meng-instansiasi class ini; tetapi, kita langsung panggil method static 'getDefault()' untuk mendapatkan object 'SmsManager'. Kemudian kita mengirim sms dengan menggunakan method 'sendTextMessage()':
/*--kirim sms ke perangkat lain--*/
private void sendSMS(String nomorHp, String pesan) {
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(nomorHp, null, pesan, null, null);
}
Berikut di bawah ini adalah lima argumen di dalam method 'sendTextMessage()':
  • 'destinationAddress' - nomor handphone penerima.
  • 'scAddress' - alamat service center; gunakan 'null' untuk default SMSC.
  • 'text' - isi dari sms.
  • 'sentIntent' - 'pending intent' yang dipanggil jika sms sudah terkirim (akan dibahas lebih detil dalam latihan berikutnya).
  • 'deliveryIntent' - 'pending intent' yang dipanggil bila sms sudah diterima (akan dibahas lebih detil dalam latihan berikutnya) 
Catatan:
Bila kita mengirim sms melalui program dengan menggunakan class 'SmsManager', maka sms yang terkirim tidak akan muncul di app SMS 'built-in' si pengirim.

No comments: