Untuk membuat aplikasi seperti yang tampak pada gambar di atas, maka
buat projek baru pada IDE Eclipse. Saya membuat 5 class untuk activity, dan 6
halaman xml untuk tampilannya. Agar lebih jelas, maka berikut saya berikan
tampilan struktur program pada IDE Eclipse saya
Mula-mula kita harus membuat user interface sebagai tampilan dari
aplikasi sms sederhana tersebut. Tampilan utama tersebut terdiri dari 5 file
berekstensi .xml yang sudah saya tandai kotak hitam pada gambar di atas.
File-file berekstensi .xml tersebut diantaranya adalah:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
>
<Button
android:id="@+id/tombolbuatpesan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="32dp"
android:text="@string/buatpesan"
/>
<Button
android:id="@+id/tombolpesanmasuk"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/tombolpesankeluar"
android:layout_below="@+id/tombolbuatpesan"
android:layout_marginTop="31dp"
android:text="@string/pesanmasuk"
/>
<Button
android:id="@+id/tombolexit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tombolpesankeluar"
android:layout_centerHorizontal="true"
android:layout_marginTop="26dp"
android:text="@string/keluar"
/>
<Button
android:id="@+id/tombolpesankeluar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tombolpesanmasuk"
android:layout_centerHorizontal="true"
android:layout_marginTop="22dp"
android:text="@string/pesankeluar"
/>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView2"
android:layout_alignParentTop="true"
android:layout_marginTop="22dp"
android:text="@string/intro"
android:textStyle="italic"
/>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView2"
android:text="@string/intro2"
android:textStyle="italic"
/>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView3"
android:layout_below="@+id/textView1"
android:text="@string/intro1"
android:textStyle="italic"
/>
</RelativeLayout>
Baris kode di atas adalah
mereferensikan tampilan utama dari aplikasi sms sederhana, di mana terdapat 4
tombol yang diwakili dengan kode Button dan 3 tulisan yang diwakili dengan
TextView. Tulisan pada button dan tulisan pada textView sudah dimasukkan
kedalam file .xml yang bernama strings.xml yang disimpan pada direktori
/res/values.
buatpesan.xml
<?xml version="1.0"
encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:id="@+id/boxkontak"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="20dp"
>
<EditText
android:id="@+id/nomorHp"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="11.10"
android:ems="10"
android:inputType="number"
/>
<ImageButton
android:id="@+id/pick"
style="@drawable/phonebook"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1.14"
android:background="@drawable/phonebook"
android:contentDescription="@string/datakontak"
android:onClick="doLaunchContactPicker"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/boxsms"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/boxkontak"
android:layout_marginTop="@dimen/duapuluh"
android:orientation="horizontal"
>
<EditText
android:id="@+id/smsBox"
android:layout_width="263dp"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/lima"
android:layout_marginTop="@dimen/sepuluh"
android:ems="10"
android:hint="@string/pesanhint"
android:inputType="textMultiLine"
>
<requestFocus />
</EditText>
<ImageButton
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/send"
android:contentDescription="@string/buatpesan"
/>
</LinearLayout>
</RelativeLayout>
Baris kode diatas digunakan untuk
membuat tampilan ‘buat pesan’ pada aplikasi sms sederhana. Sesuai yang ada pada
baris kode program, pada halaman tersebut terdapat 2 editText yang digunakan
untuk menampung data nomor handphone dan data pesan. Terdapat juga 2 image
untuk mengambil data kontak handphone dan untuk mengirim pesan. Sebelumnya saya
telah menyimpan file gambar berkstensi .PNG pada direktori /res/drawable/ supaya
gambar tersebut dapat digunakan pada halaman ini.
lihatpesan.xml
<?xml version="1.0"
encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="@dimen/sepuluh"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="360dp"
android:layout_above="@+id/linearLayout1"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="50dp"
>
<TextView
android:id="@+id/tvMsg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
>
<Button
android:id="@+id/btFrd"
android:layout_width="147dp"
android:layout_height="wrap_content"
android:layout_weight="0.90"
android:text="@string/teruskan"
/>
<Button
android:id="@+id/hapus"
android:layout_width="158dp"
android:layout_height="wrap_content"
android:text="@string/hapuspesan"
/>
</LinearLayout>
<TextView
android:id="@+id/tvNumber"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="Large
Text"
android:textAppearance="?android:attr/textAppearanceLarge"
/>
<TextView
android:id="@+id/tvDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/tvNumber"
android:layout_below="@+id/tvNumber"
android:text="Small
Text"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
</RelativeLayout>
Baris kode diatas digunakan untuk
membuat halaman ‘lihat pesan’. Di mana terdapat 3 textView untuk menampilkan
nama kontak, tanggal, dan isi pesan. Terdapat juga 2 button untuk forward pesan
dan hapus pesan.
Listpesan.xml
<?xml version="1.0"
encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<ListView
android:id="@+id/listView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
Baris kode diatas digunakan untuk
menampilkan daftar pesan masuk maupun pesan keluar.
pesan_row.xml
<?xml version="1.0"
encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="6dip"
>
<TextView
android:id="@+id/pengirim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<TextView
android:id="@+id/waktu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/pengirim"
android:layout_below="@+id/pengirim"
android:text="TextView"
/>
<TextView
android:id="@+id/isipesan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/waktu"
android:layout_below="@+id/waktu"
android:text="TextView"
/>
</RelativeLayout>
Pada baris kode diatas terdapat tiga textView yang nantinya akan digunakan
untuk menampilkan nama pengirim, tanggal, dan potongan isi pesan pada list
pesan masuk maupun pesan keluar.
Pesankeluar.xml
<?xml version="1.0"
encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:scrollbars="vertical"
>
<TextView
android:id="@+id/tvName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="17dp"
android:text=""
android:textAppearance="?android:attr/textAppearanceLarge"
/>
<TextView
android:id="@+id/tvDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tvName"
android:text=""
android:textAppearance="?android:attr/textAppearanceMedium"
/>
<TextView
android:id="@+id/tvTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/tvDate"
android:layout_alignBottom="@+id/tvDate"
android:layout_marginLeft="34dp"
android:layout_toRightOf="@+id/tvDate"
android:text=""
android:textAppearance="?android:attr/textAppearanceMedium"
/>
<TextView
android:id="@+id/tvSmallMsgView"
android:layout_width="match_parent"
android:layout_height="20dp"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tvDate"
android:text=""
android:textAppearance="?android:attr/textAppearanceSmall"
/>
</RelativeLayout>
Baris kode diatas merupakan kode yang digunakan untuk tampilan lihat
pesan untuk pesan keluar. Terdapat 4 textView yang nantinya akan digunakan
untuk menampilkan nama penerima, tanggal, jam, dan isi pesan.
Nah sekarang proses membuat tampilan / UI sudah selesai, kini saatnya
membuat activity-activity .java yang nantinya akan memproses kinerja dari
aplikasi sms sederhana ini. Activity yang kita kerjakan pertama kali adalah MainActivity.java yang sudah otomatis
tercipta saat kita membuat projek baru pada Eclipse.
MainActivity.java
package
com.contohaplikasismssederhana;
import
android.os.Bundle;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import android.app.Activity;
import
android.content.Intent;
public class
MainActivity extends Activity {
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((Button) findViewById(R.id.tombolbuatpesan))
.setOnClickListener(new
OnClickListener() {
public
void onClick(View v) {
MainActivity.this.startActivity(new
Intent(
MainActivity.this,
BuatPesan.class));
}
});
((Button) findViewById(R.id.tombolpesankeluar))
.setOnClickListener(new
OnClickListener() {
public
void onClick(View v) {
Intent
click = new Intent(MainActivity.this,
DataPesan.class);
click.putExtra("tipepesan",
"sent");
startActivity(click);
}
});
((Button)
findViewById(R.id.tombolpesanmasuk))
.setOnClickListener(new
OnClickListener() {
public
void onClick(View v) {
Intent
click = new Intent(MainActivity.this,
DataPesan.class);
click.putExtra("tipepesan",
"inbox");
startActivity(click);
}
});
((Button)
findViewById(R.id.tombolexit))
.setOnClickListener(new
OnClickListener() {
public
void onClick(View v) {
Intent
intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(0);
}
});
}
}
Pada baris yang saya beri warna biru di atas mengartikan
bahwa MainActivity.java ini mereference ke halaman activity_main.xml, artinya
halaman MainActivity.java ini akan menangani
proses dari tampilan utama aplikasi ini. Pada halaman activity_main.xml
terdapat 4 tombol utama dimana tombol-tombol tersebut prosesnya ditangani oleh barisan kode yang
sudah saya cetak tebal di atas.
Untuk lebih detailnya akan saya
jelaskan satu persatu:
((Button) findViewById(R.id.tombolbuatpesan))
.setOnClickListener(new
OnClickListener() {
public
void onClick(View v) {
MainActivity.this.startActivity(new
Intent(
MainActivity.this,
BuatPesan.class));
}
});
Baris
kode diatas mewakili tombol ‘tombolbuatpesan’
yang sebelumnya sudah dibuat pada halaman main_activity.xml. Jika tombol
tersebut diklik maka dia akan diarahkan oleh intent untuk menuju activity lain
yaitu BuatPesan.java.
((Button) findViewById(R.id.tombolpesankeluar))
.setOnClickListener(new
OnClickListener() {
public
void onClick(View v) {
Intent
click = new Intent(MainActivity.this,
DataPesan.class);
click.putExtra("tipepesan",
"sent");
startActivity(click);
}
});
Baris kode diatas mewakili tombol ‘tombolpesankeluar’ yang sebelumnya
telah dibuat pada halaman main_activity.xml. Ketika tombol tersebut diklik maka
intent akan mengarahkannya ke sebuah activity lain yaitu DataPesan.java. Karena
class DataPesan diciptakan untuk meng-handle pesan keluar dan pesan masuk maka
kita membutuhkan kode putExtra untuk melewatkan parameter “tipepesan”,”sent” sehingga
class DataPesan memproses aksi tersebut untuk keperluan pesan keluar.
((Button) findViewById(R.id.tombolpesanmasuk))
.setOnClickListener(new
OnClickListener() {
public
void onClick(View v) {
Intent
click = new Intent(MainActivity.this,
DataPesan.class);
click.putExtra("tipepesan",
"inbox");
startActivity(click);
}
});
Baris kode diatas mewakili tombol ‘tombolpesanmasuk’ yang sebelumnya telah
dibuat pada halaman main_activity.xml. Ketika tombol tersebut diklik maka
intent akan mengarahkannya ke halaman activity lain yaitu DataPesan.java. Hal
ini mirip dengan tombol sebelumnya yaitu ‘tombolpesankeluar’ karena ketika
tombol-tombol tersebut diklik maka prosesnya akan dialihkan ke halaman
DataPesan.java sehingga kita membutuhkan parameterisasi untuk membedakan
prosesnya, mana yang proses pesan keluar dan mana yang proses pesan masuk.
Paramterisasi tersebut dilakukan mengguanakn kode putExtra seperti yang
terlihat pada baris kode diatas.
((Button) findViewById(R.id.tombolexit))
.setOnClickListener(new
OnClickListener() {
public
void onClick(View v) {
Intent
intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(0);
}
});
Baris kode diatas mewakili tombol ‘tombolexit’ yang sudah dibuat pada
halaman main_activity.xml. Jika tombol tersebut diklik maka intent akan
mengarahkan proses untuk membersihkan aplikasi dari memori smartphone serta System.exit(0); dan
men-destroy aplikasi tersebut.
BuatPesan.java
package
com.contohaplikasismssederhana;
import
android.app.Activity;
import
android.content.ContentValues;
import
android.content.Intent;
import
android.database.Cursor;
import
android.net.Uri;
import
android.os.Bundle;
import
android.provider.ContactsContract;
import
android.provider.ContactsContract.CommonDataKinds.Phone;
import
android.telephony.SmsManager;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.EditText;
import
android.widget.ImageButton;
import
android.widget.Toast;
public class
BuatPesan extends Activity {
EditText nomorKontak, text;
// contact picker
private
static final int CONTACT_PICKER_RESULT = 1001;
//
phonecontact
public
void doLaunchContactPicker(View view) {
Uri
uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
Intent
contactPickerIntent = new Intent(Intent.ACTION_PICK, uri);
startActivityForResult(contactPickerIntent,
CONTACT_PICKER_RESULT);
}
protected
void onActivityResult(int requestCode, int resultCode, Intent data) {
String
phone = "";
Cursor
contacts = null;
try
{
if
(resultCode == RESULT_OK) {
switch
(requestCode) {
case
CONTACT_PICKER_RESULT:
//
gets the uri of selected contact
Uri
result = data.getData();
//
get the contact id from the Uri (last part is contact
//
id)
String
id = result.getLastPathSegment();
//
queries the contacts DB for phone no
contacts
= getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone._ID
+ "=?",
new
String[] { id }, null);
//
gets index of phone no
int
phoneIdx = contacts.getColumnIndex(Phone.DATA);
if
(contacts.moveToFirst()) {
//
gets the phone no
phone
= contacts.getString(phoneIdx);
EditText
phoneTxt = (EditText) findViewById(R.id.nomorHp);
//
assigns phone no to EditText field phoneno
phoneTxt.setText(phone);
}
else {
Toast.makeText(this,
"error", Toast.LENGTH_LONG).show();
}
break;
}
}
else {
//
gracefully handle failure
Toast.makeText(BuatPesan.this,
R.string.belumdipilih,
Toast.LENGTH_SHORT).show();
}
}
catch (Exception e) {
Toast.makeText(this,
e.getMessage(), Toast.LENGTH_LONG).show();
}
finally {
if
(contacts != null) {
contacts.close();
}
}
}
@Override
public void onCreate(final Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.buatpesan);
final ImageButton send =
(ImageButton) findViewById(R.id.send);
text = (EditText)
findViewById(R.id.smsBox);
nomorKontak = (EditText)
findViewById(R.id.nomorHp);
// fungsi untuk menampilkan isi
pesan saat akan diteruskan
Intent i = getIntent();
if
(i.getStringExtra("message") != null) {
text.setText(i.getStringExtra("message"));
}
send.setOnClickListener(new
OnClickListener() {
public void onClick(View v)
{
String pesan =
text.getText().toString();
String nomor =
nomorKontak.getText().toString();
if (pesan.length()
> 0 && nomor.length() > 0) {
try {
//
proses kirim sms
SmsManager
sms = SmsManager.getDefault();
sms.sendTextMessage(nomor,
null, pesan, null, null);
//
proses simpan sms yang terkirim
ContentValues
values = new ContentValues();
values.put("address",
nomor);
values.put("body",
pesan);
getContentResolver().insert(
Uri.parse("content://sms/sent"),
values);
Toast.makeText(BuatPesan.this,
"Pesan
berhasil dikirim", Toast.LENGTH_SHORT)
.show();
finish();
} catch
(Exception e) {
Toast.makeText(BuatPesan.this,
"Pesan gagal dikirim",
Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
} else {
Toast.makeText(BuatPesan.this,
"Nomor
atau Isi Pesan Masing Kosong",
Toast.LENGTH_SHORT).show();
}
}
});
}
}
Saat user meng-klik tombol ‘Buat Pesan’ pada halaman utama,
makan ActivityMain.java akan mengarahkannya pada halaman BuatPesan.java. Pada
baris yang dicetak dengan warna biru tebal diatas digunakan untuk me-load serta
memilih kontak yang ada pada smartphone. Terdapat 4 komponen penting pada halaman ini yaitu image button yang
digunakan untuk memilih kontak, kemudian edit text untuk mengisi nomor
handphone, kemudian ada juga edit text untuk menginputkan isi pesan, dan yang
terakhir adalah image button untuk mengirim pesan.
setContentView(R.layout.buatpesan);
final ImageButton send =
(ImageButton) findViewById(R.id.send);
text = (EditText)
findViewById(R.id.smsBox);
nomorKontak = (EditText)
findViewById(R.id.nomorHp);
// fungsi untuk menampilkan isi
pesan saat akan diteruskan
Intent i = getIntent();
if
(i.getStringExtra("message") != null) {
text.setText(i.getStringExtra("message"));
}
Pada baris
diatas terdapat deklarasi image button (send), edit text (nomor kontak), dan
edit text (isi pesan) dan kesemuanya telah mengarah pada komponen yang sudah
diciptakan pada halaman buatpesan.xml.
Pada baris kode tersebut juga terdapat intent
yang digunakan untuk menangkap data jika pada saat halaman tersebut dibuka
ternyata terdapat data yang di parsing oleh intent jika user meng-klik fungsi
forward pada halaman lihat pesan sebelumnya.
send.setOnClickListener(new
OnClickListener() {
public void onClick(View v)
{
String pesan =
text.getText().toString();
String nomor =
nomorKontak.getText().toString();
if (pesan.length()
> 0 && nomor.length() > 0) {
try {
//
proses kirim sms
SmsManager
sms = SmsManager.getDefault();
sms.sendTextMessage(nomor,
null, pesan, null, null);
Baris kode diatas akan dijalankan saat image
button (send) ditekan. EditText (nomor kontak) dan EditText (pesan) akan
diinisialisasi dengan data yang dipilih / dientry oleh user. Kemudian proses
pengiriman pesan akan dijalankan oleh method SmsManager. Tidak seperti method-method yang lain yang bisa langsung
diinstansiasi, SmsManager memerlukan method getDefault dan sendTextMessege
untuk instansiasi.
DataPesan.java
package
com.contohaplikasismssederhana;
import
java.util.Date;
import
java.text.DateFormat;
import
android.app.Activity;
import android.content.ContentResolver;
import
android.content.Intent;
import
android.database.Cursor;
import
android.net.Uri;
import
android.os.Bundle;
import
android.provider.ContactsContract;
import
android.support.v4.widget.SimpleCursorAdapter;
import
android.widget.AdapterView;
import
android.widget.AdapterView.OnItemClickListener;
import
android.widget.ListView;
import
android.widget.TextView;
import
android.view.View;
public class
DataPesan extends Activity {
private SimpleCursorAdapter dataAdapter;
@Override
public void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listpesan);
displayListView();
}
private void displayListView() {
Intent i = getIntent();
Uri uriSMS = Uri
.parse("content://sms/"
+ i.getStringExtra("tipepesan"));
Cursor cursor =
getContentResolver().query(uriSMS, null, null, null,
null);
String[] columns = new String[] {
"address", "body", "date" };
int[] to = new int[] {
R.id.pengirim, R.id.isipesan, R.id.waktu };
dataAdapter = new
SimpleCursorAdapter(this, R.layout.pesan_row, cursor,
columns, to, 0);
ListView listView = (ListView)
findViewById(R.id.listView1);
dataAdapter.setViewBinder(new
SimpleCursorAdapter.ViewBinder() {
@Override
public boolean
setViewValue(View view, Cursor cursor,
int
columnIndex) {
// ubah nomer hape
dengan nama yang ada dikontak
if (columnIndex == 2)
{
TextView tv =
(TextView) view;
String
pengirimDB = cursor.getString(cursor
.getColumnIndex("address"));
// get contact
name
Uri contactUri
= Uri.withAppendedPath(
ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(pengirimDB));
Cursor cur =
getContentResolver().query(contactUri, null,
null,
null, null);
ContentResolver
contect_resolver = getContentResolver();
int size =
cur.getCount();
if (size >
0 && cur != null) {
for
(int i = 0; i < size; i++) {
cur.moveToPosition(i);
String
id1 = cur.getString(cur
.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
Cursor
phoneCur = contect_resolver
.query(contactUri,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+
" = ?",
new
String[] { id1 }, null);
if
(phoneCur.moveToFirst()) {
String
namaKontak = phoneCur.getString(phoneCur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
phoneCur.close();
tv.setText(namaKontak);
}
else {
tv.setText(pengirimDB);
}
}
cur.close();
} else {
tv.setText(pengirimDB);
}
return true;
}
// konversi tanggal
if (columnIndex == 4)
{
TextView tv =
(TextView) view;
String waktu =
cursor.getString(cursor
.getColumnIndex("date"));
long l =
Long.parseLong(waktu);
Date d = new
Date(l);
String date =
DateFormat.getDateInstance(DateFormat.LONG)
.format(d);
String time =
DateFormat.getTimeInstance().format(d);
String
view_waktu = date + " " + time;
tv.setText(view_waktu);
return true;
}
return false;
}
});
// menampilkan daftar pesan
listView.setAdapter(dataAdapter);
// jika di pesan di klik, maka
akan dialihkan ke lihat pesan secara full
listView.setOnItemClickListener(new
OnItemClickListener() {
@Override
public void
onItemClick(AdapterView<?> listView, View view,
int position,
long id) {
// Get the cursor,
positioned to the corresponding row in the
//
result set
Cursor cursor =
(Cursor) listView.getItemAtPosition(position);
// Get the state's
capital from this row in the database.
String view_pengirim
= cursor.getString(cursor
.getColumnIndexOrThrow("address"));
String view_isipesan
= cursor.getString(cursor
.getColumnIndexOrThrow("body"));
String waktu =
cursor.getString(cursor
.getColumnIndexOrThrow("date"));
// konversi tanggal
long l =
Long.parseLong(waktu);
Date d = new Date(l);
String date =
DateFormat.getDateInstance(DateFormat.LONG)
.format(d);
String time =
DateFormat.getTimeInstance().format(d);
String view_waktu =
date + " " + time;
String view_idpesan =
cursor.getString(cursor
.getColumnIndexOrThrow("_id"));
String view_thread =
cursor.getString(cursor
.getColumnIndexOrThrow("thread_id"));
Intent click = new
Intent(DataPesan.this, LihatPesan.class);
// get contact name
Uri contactUri =
Uri.withAppendedPath(
ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(view_pengirim));
Cursor cur =
getContentResolver().query(contactUri, null, null,
null,
null);
ContentResolver
contect_resolver = getContentResolver();
int size =
cur.getCount();
if (size > 0
&& cur != null) {
for (int i =
0; i < size; i++) {
cur.moveToPosition(i);
String
id1 = cur.getString(cur
.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
Cursor
phoneCur = contect_resolver
.query(contactUri,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+
" = ?", new String[] { id1 },
null);
if
(phoneCur.moveToFirst()) {
String
namaKontak = phoneCur.getString(phoneCur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
phoneCur.close();
click.putExtra("no",
namaKontak);
} else
{
click.putExtra("no",
view_pengirim);
}
}
cur.close();
} else {
click.putExtra("no",
view_pengirim);
}
// kirim data ke view
pesan
click.putExtra("msg",
view_isipesan);
click.putExtra("idpesan",
view_idpesan);
click.putExtra("idthread",
view_thread);
click.putExtra("date",
view_waktu);
Intent i =
getIntent();
click.putExtra("asal",
i.getStringExtra("tipepesan"));
startActivity(click);
}
});
}
@Override
public void onBackPressed() {
Intent link = new
Intent(DataPesan.this, MainActivity.class);
startActivity(link);
finish();
}
}
Baris kode diatas berkaitan dengan list yang
ada pada pesan masuk dan pesan keluar. Pada halaman pesan masuk / pesan keluar
terdapat beberapa data yang akan diload dalam bentuk listView. Activity
DataPesan.java ini mengacu pada halaman listpesan.xml dimana pada halaman
listpesan.xml sudah dibuat listView. Data yang akan diload pada listView
mempunyai format yaitu nama pengirim, tanggal, dan sebagian isi pesan. Data
tersebut akan diload dengan fungsi SimpleCursorAdapter.
Kemudian untuk memenuhi format list pesan, maka halaman tersebut akan
mengarahkan ke pesan_row.xml
LihatPesan.java
package
com.contohaplikasismssederhana;
import
android.app.Activity;
import
android.content.DialogInterface;
import
android.content.Intent;
import
android.net.Uri;
import
android.os.Bundle;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.TextView;
import
android.widget.Toast;
public class
LihatPesan extends Activity {
TextView number, date, msg;
Button forward, hapus;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.lihatpesan);
number = (TextView)
findViewById(R.id.tvNumber);
date = (TextView)
findViewById(R.id.tvDate);
msg = (TextView)
findViewById(R.id.tvMsg);
forward = (Button)
findViewById(R.id.btFrd);
hapus = (Button)
findViewById(R.id.hapus);
}
@Override
protected void onStart() {
super.onStart();
Intent i = getIntent();
number.setText(i.getStringExtra("no"));
date.setText(i.getStringExtra("date"));
msg.setText(i.getStringExtra("msg"));
forward.setOnClickListener(new
OnClickListener() {
@Override
public void onClick(View v)
{
Intent click = new
Intent(LihatPesan.this, BuatPesan.class);
click.putExtra("message",
msg.getText());
startActivity(click);
}
});
hapus.setOnClickListener(new
OnClickListener() {
@Override
public void onClick(View v)
{
Dialogs.showConfirmation(LihatPesan.this,
R.string.hapuspesan_dialog,
new DialogInterface.OnClickListener() {
public
void onClick(DialogInterface dialog,
int
which) {
Intent
i = getIntent();
String
id_pesan_hapus = i
.getStringExtra("idpesan");
String
id_thread_hapus = i
.getStringExtra("idthread");
//
hapus pesan
Uri
deleteUri = Uri.parse("content://sms");
getContentResolver()
.delete(deleteUri,
"thread_id=?
and _id=?",
new
String[] {
String.valueOf(id_thread_hapus),
String.valueOf(id_pesan_hapus) });
finish();
Toast.makeText(LihatPesan.this,
"Pesan
Terhapus", Toast.LENGTH_SHORT)
.show();
//
redirect data pesan
onBackPressed();
}
});
}
});
}
@Override
public void onBackPressed() {
Intent link = new
Intent(LihatPesan.this, DataPesan.class);
Intent i = getIntent();
link.putExtra("tipepesan",
i.getStringExtra("asal"));
startActivity(link);
}
}
Baris kode diatas ditujukan untuk memproses
halaman lihatpesan.xml yang sebelumnya telah dibuat.
public class
LihatPesan extends Activity {
TextView number, date, msg;
Button forward, hapus;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.lihatpesan);
number = (TextView)
findViewById(R.id.tvNumber);
date = (TextView)
findViewById(R.id.tvDate);
msg = (TextView)
findViewById(R.id.tvMsg);
forward = (Button) findViewById(R.id.btFrd);
hapus = (Button)
findViewById(R.id.hapus);
}
Pada bagian baris kode diatas terlihat bahwa
halaman tersebut ditujukan untuk memproses halaman lihatpesan.xml. Terdapat
beberapa textview dan button pada halaman tersebut. Textview tersebut diantaranya
adalah number yang digunakan untuk
menampilkan nama pengirim pesan, kemudian date
yang digunakan untuk menampilkan tanggal pengiriman pesan, da nada juga msg yang digunakan untuk menampilkan
isi pesan. Kemudian terdapat 2 button pada halaman tersebut yaitu button untuk
memforward pesan dan button untuk menghapus pesan, keduanya diinisialisasi
dengan nama forward dan hapus.
protected void
onStart() {
super.onStart();
Intent i = getIntent();
number.setText(i.getStringExtra("no"));
date.setText(i.getStringExtra("date"));
msg.setText(i.getStringExtra("msg"));
Data-data nama pengirim, tanggal, dan isi pesan
tersebut sebelumnya telah diparsing dahulu melalui activity DataPesan.java,
sehingga pada halaman ini kita hanya tinggal menangkapnya dengan fungsi
getIntent(); seperti yang terlihat pada potongan baris kode diatas. Setelah itu
data yang sudah ditangkap tadi kita masukkan ke textView yang sudah
diinisialisasi tadi menggunakan fungsi setText.
forward.setOnClickListener(new
OnClickListener() {
@Override
public void onClick(View v)
{
Intent click = new
Intent(LihatPesan.this, BuatPesan.class);
click.putExtra("message",
msg.getText());
startActivity(click);
}
});
Ketika button forward ditekan maka intent (click) akan mengarahkannya ke
activity BuatPesan.java seperti yang terlihat pada gambar diatas. Tentunya
dengan parameter yang sudah dipersiapkan, yaitu “messege”, yang isinya adalah
pesan yang sudah ditangkap dengan kode msg.getText().
hapus.setOnClickListener(new
OnClickListener() {
@Override
public void onClick(View v)
{
Dialogs.showConfirmation(LihatPesan.this,
R.string.hapuspesan_dialog,
new
DialogInterface.OnClickListener() {
public
void onClick(DialogInterface dialog,
int
which) {
Intent
i = getIntent();
String
id_pesan_hapus = i
.getStringExtra("idpesan");
String
id_thread_hapus = i
.getStringExtra("idthread");
//
hapus pesan
Uri
deleteUri = Uri.parse("content://sms");
getContentResolver()
.delete(deleteUri,
"thread_id=?
and _id=?",
new
String[] {
String.valueOf(id_thread_hapus),
String.valueOf(id_pesan_hapus) });
finish();
Ketika tombol ‘hapus pesan’ ditekan maka intent akan mencari id pesan
kemudian menghapus data pesan tersebut. Dimana aksi tersebut diwakili oleh kode
.delete.
Setelah halaman-halaman activity tersebut diciptakan, langkah
selanjutnya adalah mengedit halaman AndroidManifest.xml
<?xml version="1.0"
encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.contohaplikasismssederhana"
android:versionCode="1"
android:versionName="1.0"
>
<uses-permission
android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS"
/>
<uses-permission android:name="android.permission.WRITE_SMS"
/>
<uses-permission android:name="android.permission.RECEIVE_SMS"
/>
<uses-permission
android:name="android.permission.READ_CONTACTS" />
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17"
/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
>
<activity
android:name="com.contohaplikasismssederhana.MainActivity"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="android.intent.action.MAIN"
/>
<category android:name="android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
<activity
android:name="com.contohaplikasismssederhana.BuatPesan"
android:label="@string/app_name"
>
</activity>
<activity
android:name="com.contohaplikasismssederhana.LihatPesan"
android:label="@string/app_name"
>
</activity>
<activity
android:name="com.contohaplikasismssederhana.DataPesan"
android:label="@string/app_name"
>
</activity>
</application>
</manifest>
Pada baris yang saya
cetak tebal dengan warna merah diatas mengartikan bahwa aplikasi yang kita buat
memerlukan perizinan untuk membuat, mengirim, membaca, dan menerima sms serta
melihat kontak di handphone. Mengapa memerlukan perizinan? Jawabnya adalah
karena kita tidak menggunakan aplikasi built in dari android.
Pada baris diatas juga
terlihat bahwa kita mengguanakn 4 activity yang berbeda. Activity-activity
tersebut adalah activity yang mewakili button-button utama pada tampilan utama
aplikasi.
Proses selanjutnya
adalah menjalankan aplikasi tersebut melalui AVD (Android Virtual Device).
Untuk membuat AVD,
silahkan menuju menu Windows ->
Android Virtual Device
Disini saya sudah membuat 2 AVD seperti yang telah terlihat pada gambar dibawah ini:
Kemudian saya start AVD tersebut dengan menekan
button start. Tunggu hingga tampilannya seperti berikut ini.
Selanjutnya adalah me-running aplikasi yang telah kita buat ke dalam AVD
tersebut caranya yaitu:
Klik
kanan pada direktori projek, kemudian pilih run us -> android application
Selanjutnya akan muncul tampilan seperti berikut
ini:
Pilih salah satu AVD yang akan menjalankan aplikasi kita, dalam kasus
diatas saya memilih ‘mbuhView2’ sebagai AVD yang menjalankan aplikasi sms ini.
Kemudian munculah aplikasi yang sudah kita buat tadi
Saya mencoba membuat pesan dan mengirimnya ke AVD saya yang satunya,
dengan cara seperti berikut ini
Saya mencoba mengirimkan pesan ke device 5556 / ‘mbuhView’ dengan cara
mengetikkan nomor handphone device 5556. Karena ini AVD maka nomornya adalah
5556 sesuai nomor ID AVD tersebut. Kemudian saya mengetikkan pesan yang ingin
saya kirim, dan saya klik kirim. Alhasil di AVD 5556 pesan tiba dan sesua
dengan apa yang saya entry kan.
SEKIAN DAN TERIMA KASIH.
2 Komentar
Ass,wr,wt saya atas Ibu salmah sangat berterima kasih banyak kepada AKI SOLEH atas bantuan pesugihan dana ghaib, kini kehidupan saya sekeluarga sudah jauh lebih baik dari sebelumnya,ternyata apa yang tertulis didalam blok AKI SOLEH itu semuanya benar benar terbukti nyata dan saya adalah salah satunya orang yang sudah membuktikannya sendiri,usaha kami dulunya bangkrut kini alhamdulillah sekarang sudah mulai bangkit lagi itu semua berkat bantuan AKI,saya tidak pernah menyangka kalau saya bisa sesukses seperti ini, dan kami sekeluarga tak lupah mengucapkan banyak berterima kasih kepada AKI,,bagi anda yang ingin dibantu sama AKI SOLEH silahkan hubungi di 082 313 336 747 insya allah AKI akan membantu anda dengan senang hati,pesugihan putih tanpa resiko apapun
BalasAtau Chat/Tlpn di WhatsApp (WA)
No WA Aki : 082313336747
F4n583771nG | Ayo Joint.... ditunggu ya :) silahkan di add
BalasWA kami @ +855 963 156 245
line @ fansbetting
wechat @ fansbetting3
bersama dengan kami CS fansbetting thankyou,,,
Penulisan markup di komentar