19 September 2013

การส่งข้อความผ่าน SMS แบบง่ายๆ

Updated on

        บทความรอบนี้ลองมาทำแอปพลิเคชันส่งข้อความผ่าน SMS แบบง่ายดูบ้าง


        สำหรับการส่งข้อความจะใช้คลาสที่ชื่อว่า SmsManager

SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(เบอร์โทร, null, ข้อความ, null, null);

        ดูจากคำสั่งแล้วคงเดาการใช้งานได้ไม่ยากนัก สำหรับเบอร์โทรและข้อความที่กำหนดจะเป็น String ดังนั้นจึงนำข้อความจาก Edit Text มาใส่ได้เลย

        สำหรับตอน Import คลาสของ SmsManager จะมีให้เลือกสองอัน ให้เลือกที่ android.telephony อีกอันเป็นของเก่าที่เลิกใช้แล้ว



        และสำหรับการส่งข้อความ SMS ภายในแอปพลิเคชันที่สร้างขึ้นจะต้องมีการขอ Permission ในการส่ง SMS ด้วย ประกาศดังนี้

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


        ตัวอย่างนี้จะมี Edit Text สองอันใส่เบอร์โทรกับข้อความ แล้วมี Button สำหรับกดเพื่อทำการส่งข้อความ

main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/RelativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <requestFocus />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Phone Number"
                android:textSize="16sp" />

            <EditText
                android:id="@+id/etPhoneNumber"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:ems="10"
                android:inputType="phone"
                android:textSize="18sp" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Message"
                android:textSize="16sp" />

            <EditText
                android:id="@+id/etMessage"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:ems="10"
                android:textSize="18sp" />
        </LinearLayout>
    </LinearLayout>

    <Button
        android:id="@+id/btnSend"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="Send" />
</RelativeLayout>



Main.java
package app.akexorcist.sendsms;

import android.os.Bundle;
import android.app.Activity;
import android.telephony.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Main extends Activity {
    EditText etPhoneNumber, etMessage;
    Button btnSend;

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

        etPhoneNumber = (EditText)findViewById(R.id.etPhoneNumber);
        etMessage = (EditText)findViewById(R.id.etMessage);

        btnSend = (Button)findViewById(R.id.btnSend);
        btnSend.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                String phoneNumber = etPhoneNumber.getText().toString();
                String message = etMessage.getText().toString();
                if(phoneNumber.length() != 0 && message.length() != 0) {
                    sendSMS(phoneNumber, message);
                    etPhoneNumber.setText("");
                    etPhoneNumber.requestFocus();
                    etMessage.setText("");
                    Toast.makeText(getApplicationContext()
                            , "Message has sent"
                            , Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getApplicationContext()
                            , "Please enter phone number and message"
                            , Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    public void sendSMS(String phoneNumber, String message) {
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, null, null);
    }
}

        1. ประกาศตัวแปร Edit Text และ Button ที่ต้องการใช้งาน

        2. กำหนดค่าให้กับ Edit Text ทั้ง 2 ตัว

        3. กำหนดค่าให้กับ Button และประกาศ Listener เป็น On Click

        4. เมื่อผู้ใช้กดปุ่ม ก็จะทำการเก็บค่าจาก Edit Text ทั้งสองมาไว้ในตัวแปร String

        5. เช็คว่าตัวแปร String ทั้งสองมีจำนวนตัวอักษรมากกว่า 0 หรือไม่ ถ้ามากกว่า 0 ก็หมายความว่ามีข้อความที่ผู้ใช้พิมลงใน Edit Text ก็จะให้เรียกฟังก์ชัน sendSMS เพื่อส่งข้อความ SMS โดยกำหนดพารามิเตอร์เป็นตัวแปร String ทั้งสองตัวนั่นเอง จากนั้นก็เคลียร์ข้อความใน Edit Text ทั้งสองตัวทิ้ง แล้วให้เคอร์เซอร์เลือกไปที่ Edit Text ที่เป็นของ Phone Number แล้วทำการแสดง Toast เพื่อแจ้งให้ผู้ใช้รู้ว่า ข้อความถูกส่งเรียบร้อยแล้ว

        6. ในกรณีที่ตัวแปร String ทั้งสองไม่มีตัวอักษรอยู่เลย (มี 0 ตัว) จะหมายความว่าผู้ใช้ยังไม่ได้ใส่ข้อความใน Edit Text แล้วกดส่ง ก็จะไม่ทำการส่งข้อความ แต่จะแสดง Toast เพื่อแจ้งว่าให้ใส่ข้อความก่อน

        7. ฟังก์ชันสำหรับส่งข้อความผ่าน SMS โดยจะมีพารามิเตอร์สองตัว คือเบอร์โทรที่จะส่งและข้อความที่จะส่ง ทั้งสองตัวนี้เป็น String ในฟังก์ชันนี้ก็จะเรียกใช้คลาส SmsManager เพื่อทำการส่งข้อความ


AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="app.akexorcist.sendsms"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="app.akexorcist.sendsms.Main"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

        เวลาทดสอบก็ให้ลองพิมเบอร์โทรและข้อความที่ต้องการส่งแล้วให้ปุ่ม Send ก็จะทำการส่งข้อความ SMS ไปหาเบอร์นั้นๆ

        สำหรับผู้ที่หลงเข้ามาอ่านที่ต้องการไฟล์ตัวอย่างสามารถดาวน์โหลดได้ที่ Send SMS [Google Drive]