Kamis, 02 Juni 2011

Mengirimkan Sms dengan Android Source Code / Mengambil nomor contact dari android

Nah pada kesempatan kali ini ane ingin berbagi ilmu lagi nih pada temen - temen yang ingin mendalami mengenai android. Nah pada tutorial kali ini akan ane berikan sedikit tutorial mengenai mengirimkan pesan di android. Pada dasarnya kita dapat mengirimkan pesan di android dengan mudah dengan memanfaatkan kelas SmsManager yang ada di android. Oke langsung saja kita desain layoutnya ya..



<?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:background="@drawable/back" android:orientation="vertical">
 <ImageView android:src="@drawable/header"
  android:layout_width="wrap_content" android:layout_height="wrap_content">
 </ImageView>
 <!-- layout untuk header -->
 <LinearLayout android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:orientation="horizontal"
  android:layout_marginTop="20dip" android:layout_marginLeft="20dip">
  <!-- layout gambar home -->
  <ImageView android:layout_width="wrap_content"
   android:layout_height="wrap_content" android:src="@drawable/home"></ImageView>
  <TextView android:text="Main Menu / Generate Chart"
   android:layout_width="fill_parent" android:layout_height="wrap_content"
   android:textColor="#000000" android:textStyle="bold"
   android:textSize="17dip" android:id="@+id/title_caption"></TextView>
 </LinearLayout>
 <!-- layout untuk garis line -->
 <RelativeLayout android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:background="@drawable/line_gradient"
  android:layout_marginTop="-15dip"></RelativeLayout>
 <RelativeLayout android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:background="@drawable/line"
  android:layout_marginTop="20dip"></RelativeLayout>
 <ScrollView android:layout_width="fill_parent"
  android:layout_height="wrap_content">
  <LinearLayout android:layout_width="fill_parent"
   android:layout_height="wrap_content" android:orientation="vertical">
   <TextView android:text="Nomor HP" android:textColor="#000000"
    android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
   <LinearLayout android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:orientation="horizontal">
    <EditText android:text="" android:id="@+id/TextNoHP"
     android:layout_width="210dip" android:layout_height="wrap_content"></EditText>
    <ImageButton android:layout_width="wrap_content"
     android:id="@+id/button_add_contact" android:layout_height="wrap_content"
     android:src="@drawable/add_contact"></ImageButton>
    <ImageButton android:layout_width="wrap_content"
     android:id="@+id/button_send" android:layout_height="wrap_content"
     android:src="@drawable/sms"></ImageButton>
   </LinearLayout>
   <TextView android:text="Pesan" android:textColor="#000000"
    android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
   <EditText android:text="" android:id="@+id/TextPesan"
    android:layout_width="fill_parent" android:minLines="4"
    android:layout_height="wrap_content"></EditText>
  </LinearLayout>
 </ScrollView>
</LinearLayout>




Nah untuk dapat mengirimkan smsnya cukup simple tinggal buat aja activity yang mengambil contact dari content providernya. Nah biar gak kelamaan ngomong langsung aja buat code seperti ini ane buat di SmsActivity.

package org.data.provider;

import java.util.List;

import android.app.Activity;
import android.app.PendingIntent;
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.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 SmsActivity extends MyActivity {
 public static final String ACTION_SMS_SENT = "com.example.android.apis.os.SMS_SENT_ACTION";
 public static final int PICK_CONTACT = 1;
 private EditText EditTextPesan, EditTextNomorHp;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.layout_sms);
  String sentText = getIntent().getExtras().getString("SEND_TEXT");

  EditTextPesan = (EditText) findViewById(R.id.TextPesan);
  EditTextNomorHp = (EditText) findViewById(R.id.TextNoHP);
  EditTextPesan.setText(sentText);
  final SmsManager sms = SmsManager.getDefault();
  ImageButton buttonSend = (ImageButton) findViewById(R.id.button_send);
  buttonSend.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    if(EditTextNomorHp.getText().toString().equals("")){
     Dialog.pesanOk("Maaf anda belum memilih nomor telepon", SmsActivity.this);
     return;
    }
    List messages = sms.divideMessage(EditTextPesan
      .getText().toString());

    String recipient = EditTextNomorHp.getText().toString();
    for (String message : messages) {
     sms.sendTextMessage(recipient, null, message, PendingIntent
       .getBroadcast(SmsActivity.this, 0, new Intent(
         ACTION_SMS_SENT), 0), null);
    }
    Toast.makeText(SmsActivity.this, "Pesan anda berhasil dikirim ", Toast.LENGTH_LONG).show();
   }
  });
  ImageButton img = (ImageButton) findViewById(R.id.button_add_contact);
  img.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    Intent intent = new Intent(Intent.ACTION_PICK,
      ContactsContract.Contacts.CONTENT_URI);
    startActivityForResult(intent, PICK_CONTACT);

   }
  });
 }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == PICK_CONTACT && resultCode==Activity.RESULT_OK) {
   Uri contactData = data.getData();
   ContentResolver cr = getContentResolver();
   Cursor cur = managedQuery(contactData, null, null, null, null);
   if (cur.getCount() > 0) {
    while (cur.moveToNext()) {
     String id = cur.getString(cur
       .getColumnIndex(ContactsContract.Contacts._ID));
     if (Integer
       .parseInt(cur.getString(cur
         .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
      Cursor pCur = cr
        .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
          null,
          ContactsContract.CommonDataKinds.Phone.CONTACT_ID
            + " = ?", new String[] { id },
          null);
      while (pCur.moveToNext()) {
       String nomorHp = pCur
         .getString(pCur
           .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA));
       EditTextNomorHp.setText(nomorHp);
      }
      pCur.close();
     }
    }
   }
  }
 }
}



Nah cukup simple kan. Memang semua fungsi yang ada di android dapat dilakukan dengan mudah..
Semoga bermanfaat.

Update
Karena banyak yang menanyakan project dari source ini langsung saja download full projectnya disini yah..
https://dl.dropbox.com/u/20916268/Data%20Service%20Provider%209%20oktober%202011.zip

33 komentar:

  1. android apa yang kamu pake? lagi nyari2 android yang murah tapi bagus nih hehe

    BalasHapus
  2. salah tempat kayaknya kalo nanya disini

    BalasHapus
  3. mas,,mau tanya,,untuk class MyActivity nya tidak dijelaskan codingnya?..
    apakah jarus dibuat class utk MyActivity?

    BalasHapus
  4. oh pake Activity juga papa kok. itu saya pake untuk setting keseluruhan activity biar seragam...

    BalasHapus
  5. Bisa di upload project'nya gak mas. :D

    BalasHapus
  6. Balasan
    1. kakak minta projectya ni ? ni email saya adhadimas91@gmail.com
      oia Fb ya di confim ya ... mksi kak .

      Hapus
  7. mas...untuk ngambil kontak dari phonebook koq ga bisa ya...??

    BalasHapus
  8. mas kok force close y,,
    di manifest y di tambahin user-permission apa gtu gk ? hehe

    BalasHapus
  9. kk, minta project dong udh nyoba tp force close trs di bagian ContactsContract ngak bsa di import,,
    email y : ayat312@gmail.com
    makasih y kk,,

    BalasHapus
  10. ForceClosenya apa coba cek dulu di logcat...

    BalasHapus
  11. mas ContactsContract kok gk bsa y, langsung di import android.provider.ContactsContract; malah tanda merah knp y?

    BalasHapus
  12. Coba cek lagi merahnya itu kenapa..?? kalo tetap gak bisa berarti masalahnya bukan di importnya

    BalasHapus
  13. mas mo nanya n, pas button_add_contact diklik muncul kontak y tapi gk ke set ke TextNoHP y...
    fungsi onActivityResult di panggil y dmn ya mas..

    BalasHapus
  14. onActivityResultnya kan udah jelas kan di Activity yang mengambil..

    BalasHapus
  15. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  16. mas saya mau tanya, kalo maksud dari syntax ini apa ya ?

    if(EditTextNomorHp.getText().toString().equals("")){
    Dialog.pesanOk("Maaf anda belum memilih nomor telepon", SmsActivity.this);
    return;

    Setelah saya coba ada tanda merah di .pesanOK
    makasih mas sebelumnya..

    BalasHapus
  17. Itu pake alertdialog sesuaikan ma codingmu

    BalasHapus
  18. oia mas mau nanya lagi.. mas punya source code android untuk menampilkan inbox sms ga..? saya dah nyari tapi agak susah juga nemunya... mkasih mas sebelumnya

    BalasHapus
  19. gan ane minta sourcodenya....email saya, benbear91@gmail.com

    BalasHapus
  20. boleh minta sourcodenya gan? little.shine2507@gmail.com
    thanks

    BalasHapus
  21. mas aq minta programnya, kirim ke andy.octaviani@gmail.com

    BalasHapus
  22. gan...
    boleh minta sourcodenya gan?
    penting nih buat belajar dari agan... hehhee
    butuh bantuannya ya gan...
    Thx... ^^
    welly990@gmail.com

    BalasHapus
  23. aslm mas,
    bagaimana kalau kita mengKlik link dari isi pesan yg kita terima, gmna kodingannya mas ??
    karena saya sudah buat kodingan untuk menerima pesan tapi saya kesusahan dalam meng"CLICKABLE" link dari isi pesan tersebut, bisa bantu gak mas ??

    BalasHapus
  24. Wah Keren...
    Minta ProjecNya donk Mas...
    Kirim ke Email Saya : Daniraka_19@yahoo.co.id

    Makasih ya Mas...

    BalasHapus
  25. kk minta di kirimin full projectnya dunk ke email ini
    meizoel@gmail.com

    aku lagi butuh banget nih buat tugas skripsi
    plis bantuin yah kk

    BalasHapus
  26. Gan Minta source code nya gan.

    gw butuh bgt skripsi gw..

    nicolas.oct@gmail.com

    BalasHapus
  27. Baca tulisan ane di akhir post ini gan..

    BalasHapus
  28. mas minta projectnya donk.untuk study mobile programing.
    email:rubaman.hasuli@gmail.com
    thank you.. :)

    BalasHapus
  29. wow,. nice. (y)

    can u send the source code to my e-mail.
    lotulung.c@gmail.com

    BalasHapus
  30. minta source codenya
    gmail: rivantimargarita@gmail.com

    BalasHapus