Top Banner

Click here to load reader

20

Sms Sederhana

Nov 09, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript

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 pickerprivate static final int CONTACT_PICKER_RESULT = 1001;

// phonecontactpublic 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 contactUri 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 nocontacts = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone._ID + "=?",new String[] { id }, null);// gets index of phone noint phoneIdx = contacts.getColumnIndex(Phone.DATA);if (contacts.moveToFirst()) {// gets the phone nophone = contacts.getString(phoneIdx);EditText phoneTxt = (EditText) findViewById(R.id.nomorHp);// assigns phone no to EditText field phonenophoneTxt.setText(phone);} else {Toast.makeText(this, "error", Toast.LENGTH_LONG).show();}

break;

}

} else {// gracefully handle failureToast.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();}}}

@Overridepublic 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 diteruskanIntent 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 smsSmsManager sms = SmsManager.getDefault();sms.sendTextMessage(nomor, null, pesan, null, null);

// proses simpan sms yang terkirimContentValues 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();}

}});

}

}

buatpesan.xml

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;

@Overridepublic 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() {@Overridepublic boolean setViewValue(View view, Cursor cursor,int columnIndex) {

// ubah nomer hape dengan nama yang ada dikontakif (columnIndex == 2) {TextView tv = (TextView) view;String pengirimDB = cursor.getString(cursor.getColumnIndex("address"));// get contact nameUri 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 tanggalif (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 pesanlistView.setAdapter(dataAdapter);

// jika di pesan di klik, maka akan dialihkan ke lihat pesan secara fulllistView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView listView, View view,int position, long id) {// Get the cursor, positioned to the corresponding row in the// result setCursor 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 tanggallong 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 nameUri 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 pesanclick.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);

}});

}

@Overridepublic void onBackPressed() {Intent link = new Intent(DataPesan.this, MainActivity.class);startActivity(link);finish();

}

}

listpesan.xml

Dialogs.java

/**This file is part of Masq.

Masq is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Masq is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with Masq. If not, see . **/

package com.contohaplikasismssederhana;

import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;

/** * Utility class for showing confirmation dialogs * * @author Richard Laughlin */public class Dialogs {

public static void showConfirmation(Context context, int message,OnClickListener onYes) {AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);

// set titlealertDialogBuilder.setTitle(R.string.confirmation);

// set dialog messagealertDialogBuilder.setMessage(message).setCancelable(false).setPositiveButton("Ya", onYes).setNegativeButton("Tidak",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int id) {dialog.cancel();}});

// create alert dialogAlertDialog alertDialog = alertDialogBuilder.create();

// show italertDialog.show();}

}

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;

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

@Overrideprotected 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() {

@Overridepublic void onClick(View v) {Intent click = new Intent(LihatPesan.this, BuatPesan.class);click.putExtra("message", msg.getText());startActivity(click);

}});hapus.setOnClickListener(new OnClickListener() {@Overridepublic 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 pesanUri 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 pesanonBackPressed();}});}});

}

@Overridepublic void onBackPressed() {Intent link = new Intent(LihatPesan.this, DataPesan.class);Intent i = getIntent();link.putExtra("tipepesan", i.getStringExtra("asal"));startActivity(link);}

}

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 {

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

}

activity_main.xml

lihatpesan.xml

pesan_row.xml

pesankeluar.xml

BuildConfig.java

/** Automatically generated file. DO NOT MODIFY */package com.contohaplikasismssederhana;

public final class BuildConfig { public final static boolean DEBUG = true;}

R.java

/* AUTO-GENERATED FILE. DO NOT MODIFY. * * This class was automatically generated by the * aapt tool from the resource data it found. It * should not be modified by hand. */

package com.contohaplikasismssederhana;

public final class R { public static final class attr { } public static final class dimen { /** Default screen margins, per the Android Design guidelines.

Customize dimensions originally defined in res/values/dimens.xml (such as screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here. */ public static final int activity_horizontal_margin=0x7f040000; public static final int activity_vertical_margin=0x7f040001; public static final int duapuluh=0x7f040002; public static final int lima=0x7f040004; public static final int sepuluh=0x7f040003; } public static final class drawable { public static final int ic_launcher=0x7f020000; public static final int phonebook=0x7f020001; public static final int send=0x7f020002; } public static final class id { public static final int boxkontak=0x7f070005; public static final int boxsms=0x7f070008; public static final int btFrd=0x7f07000d; public static final int hapus=0x7f07000e; public static final int isipesan=0x7f070014; public static final int linearLayout1=0x7f07000b; public static final int listView1=0x7f070011; public static final int nomorHp=0x7f070006; public static final int pengirim=0x7f070012; public static final int pick=0x7f070007; public static final int send=0x7f07000a; public static final int smsBox=0x7f070009; public static final int textView1=0x7f070001; public static final int tombolbuatpesan=0x7f070000; public static final int tombolexit=0x7f070004; public static final int tombolpesankeluar=0x7f070003; public static final int tombolpesanmasuk=0x7f070002; public static final int tvDate=0x7f070010; public static final int tvMsg=0x7f07000c; public static final int tvName=0x7f070015; public static final int tvNumber=0x7f07000f; public static final int tvSmallMsgView=0x7f070017; public static final int tvTime=0x7f070016; public static final int waktu=0x7f070013; } public static final class layout { public static final int activity_main=0x7f030000; public static final int buatpesan=0x7f030001; public static final int lihatpesan=0x7f030002; public static final int listpesan=0x7f030003; public static final int pesan_row=0x7f030004; public static final int pesankeluar=0x7f030005; } public static final class string { public static final int action_settings=0x7f050002; public static final int app_name=0x7f050000; public static final int belumdipilih=0x7f050001; public static final int buatpesan=0x7f050005; public static final int confirmation=0x7f05000f; public static final int datakontak=0x7f05000b; public static final int hapuspesan=0x7f05000e; public static final int hapuspesan_dialog=0x7f050009; public static final int hello_world=0x7f050003; public static final int intro=0x7f050004; public static final int keluar=0x7f050008; public static final int pesan=0x7f05000c; public static final int pesanhint=0x7f05000a; public static final int pesankeluar=0x7f050007; public static final int pesanmasuk=0x7f050006; public static final int teruskan=0x7f05000d; } public static final class style { /** Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devices.

Theme customizations available in newer API levels can go in res/values-vXX/styles.xml, while customizations related to backward-compatibility can go here.

Base application theme for API 11+. This theme completely replaces AppBaseTheme from res/values/styles.xml on API 11+ devices. API 11 theme customizations can go here.

Base application theme for API 14+. This theme completely replaces AppBaseTheme from BOTH res/values/styles.xml and res/values-v11/styles.xml on API 14+ devices. API 14 theme customizations can go here. */ public static final int AppBaseTheme=0x7f060000; /** Application theme. All customizations that are NOT specific to a particular API-level can go here. */ public static final int AppTheme=0x7f060001; }}