Tampilkan postingan dengan label Mobile Android. Tampilkan semua postingan
Tampilkan postingan dengan label Mobile Android. Tampilkan semua postingan

Minggu, 06 Mei 2012

Membuat Aplikasi SMS dengan Android

Beberapa hari yang lalu penulis dimintai bantuan oleh teman untuk bersama-sama mendevelop aplikasi Android untuk SMS secara otomatis dan masal. Setelah browsing sana-sini dan mencoba-coba, dapatlah kode program berikut yang merupakan salah satu bagian untuk mengirim SMS lewat aplikasi yang dibuat sendiri :

Pertama, buatlah project Android, misalnya dengan nama SendSMS

SendSMSActivity.java

package com.amijaya.SendSMSActivity;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class  SendSMSActivity extends Activity
{
    Button btnKirimSMS;
    EditText txtNoTelp;
    EditText txtPesan;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);      

        btnKirimSMS = (Button) findViewById(R.id.btn KirimSMS);
        txtNoTelp = (EditText) findViewById(R.id.txt NoTelp);
        txtPesan = (EditText) findViewById(R.id.txtPesan);

        btnKirimSMS.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {              
                String noTelp = txtNoTelp.getText().toString();
                String pesan = txtPesan.getText().toString();              
                if ( noTelp.length()>0 && pesan.length()>0)
                {
                 kirimSMS(noTelp, pesan);
                }
                }
                else
                    Toast.makeText(getBaseContext(),
                        "Silakan Masukkan No Telp dan Pesan.",
                        Toast.LENGTH_SHORT).show();
            }
        });      
    }
 
    private void KirimSMS(String noTelp, String pesan)
    {      
        String SENT = "SMS_SENT";
        String DELIVERED = "SMS_DELIVERED";

        PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
            new Intent(SENT), 0);

        PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
            new Intent(DELIVERED), 0);

        //---when the SMS has been sent---
        registerReceiver(new BroadcastReceiver(){
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode())
                {
                    case Activity.RESULT_OK:
                        Toast.makeText(getBaseContext(), "SMS terkirim",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case android.telephony.SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                        Toast.makeText(getBaseContext(), "error",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case android.telephony.SmsManager.RESULT_ERROR_NO_SERVICE:
                        Toast.makeText(getBaseContext(), "Tidak ada sinyal",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case android.telephony.SmsManager.RESULT_ERROR_NULL_PDU:
                        Toast.makeText(getBaseContext(), "Null PDU",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case android.telephony.SmsManager.RESULT_ERROR_RADIO_OFF:
                        Toast.makeText(getBaseContext(), "GSM mati",
                                Toast.LENGTH_SHORT).show();
                        break;
                }
            }

        }, new IntentFilter(SENT));

        //---when the SMS has been delivered---
        registerReceiver(new BroadcastReceiver(){
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode())
                {
                    case Activity.RESULT_OK:
                        Toast.makeText(getBaseContext(), "SMS delivered",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case Activity.RESULT_CANCELED:
                        Toast.makeText(getBaseContext(), "SMS not delivered",
                                Toast.LENGTH_SHORT).show();
                        break;                      
                }
            }
        }, new IntentFilter(DELIVERED));      

        android.telephony.SmsManager sms = android.telephony.SmsManager.getDefault();
        sms.sendTextMessage(noTelp, null, pesan, sentPI, deliveredPI);      
    }
}


Buat kelas baru bernama PenerimaSMS.java yang berfungsi sebagai Broadcast yang mendengarkan jika ada SMS masuk (delivered) :

package com.amijaya.SendSMS;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.gsm.SmsMessage;
import android.widget.Toast;

public class PenerimaSMS extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        Bundle bundle = intent.getExtras();      
        SmsMessage[] msgs = null;
        String str = "";          
        if (bundle != null)
        {
            Object[] pdus = (Object[]) bundle.get("pdus");
            msgs = new SmsMessage[pdus.length];          
            for (int i=0; i<msgs.length; i++){
                msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);              
                str += "SMS dari " + msgs[i].getOriginatingAddress();                  
                str += " :";
                str += msgs[i].getMessageBody().toString();
                str += "\n";      
            }
            Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
        }                      
    }
}



Buka layout/main.xml untuk membuat design tampilannya :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Enter the phone number of recipient"
        />  
    <EditText
        android:id="@+id/txtNoTelp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"    
        />
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"      
        android:text="Pesan"
        />  
    <EditText
        android:id="@+id/txtPesan"
        android:layout_width="fill_parent"
        android:layout_height="150px"
        android:gravity="top"      
        />      
    <Button
        android:id="@+id/btnKirimSMS"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Kirim SMS"
        />
</LinearLayout>




Buka AndroidManifest.xml, kemudian tambahkan baris untuk mendeklarasikan PenerimaSMS dan Permisiion untuk SEND_SMS dan RECEIVE_SMS :


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.amijaya.SendSMS"
      android:versionCode="1"
      android:versionName="1.0.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".SendSMSActivity "
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>      

        <receiver android:name=".PenerimaSMS">
            <intent-filter>
                <action android:name=
                    "android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

    </application>
    <uses-permission android:name="android.permission.SEND_SMS">
    </uses-permission>
    <uses-permission android:name="android.permission.RECEIVE_SMS">
    </uses-permission>
</manifest>