Android – Gửi SMS

Rate this post

Trong bài này chúng ta sẽ tìm hiểu cách gửi tin nhắn SMS. Về cơ bản thì có 2 cách để có thể gửi SMS là:

Lớp SmsManager cho phép chúng ta thiết lập các thông số khác nhau và do đó chúng ta có thể gửi tin nhắn một cách linh hoạt theo ý chúng ta muốn. Còn cách sử dụng Intent tức là chúng ta chỉ đơn giản là mở một ứng dụng SMS khác trong máy ra rồi để người dùng “tự xử” thôi. Trong bài này chúng ta sẽ sử dụng lớp SmsManager.

Bây giờ chúng ta tạo project mới và bắt đầu tìm hiểu cách sử dụng.

Xin quyền gửi SMS

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="phocode.com.smsmanager">

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

    <application android:allowBackup="true" 
        android:icon="@mipmap/ic_launcher" 
        android:label="@string/app_name" 
        android:supportsRtl="true" 
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

Để ứng dụng có thể gửi tin nhắn SMS thì đầu tiên chúng ta phải xin cấp quyền android.permission.SEND_SMS.

Giao diện

Chúng ta thiết kế giao diện như sau:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical" 
    tools:context="phocode.com.smsmanager.MainActivity">

    <EditText
        android:id="@+id/phoneNumber" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:ems="10" 
        android:hint="Phone number" 
        android:inputType="phone"/>

    <EditText 
       android:id="@+id/smsBody" 
        android:layout_width="fill_parent" 
        android:layout_height="0dp" 
        android:layout_weight="1" 
        android:gravity="top" 
        android:hint="Content" />

    <Button 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="Send" 
        android:onClick="sendSms"/>
</LinearLayout>

Ở đây chúng ta có 2 EditText dùng để nhập số điện thoại cần gửi và nội dung tin nhắn, một Button để gọi phương thức gửi.

MainActivity

Trong Activity chúng ta xử lý như sau:

package phocode.com.smsmanager;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private EditText phoneNumber;
    private EditText content;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        phoneNumber = (EditText) findViewById(R.id.phoneNumber);
        content = (EditText) findViewById(R.id.smsBody);
    }

    public void sendSms(View view)
    {
        try {
            SmsManager smsManager = SmsManager.getDefault();
            smsManager.sendTextMessage(phoneNumber.getText().toString(),
                    null,
                    content.getText().toString(),
                    null,
                    null);
            Toast.makeText(getApplicationContext(), "SMS sent successful", Toast.LENGTH_LONG).show();
        }
        catch(IllegalArgumentException ex)
        {
            Toast.makeText(getApplicationContext(), "Sending SMS failed", Toast.LENGTH_LONG).show();
        }
    }
}

Lớp Activity này kế thừa từ lớp AppCompatActivity.

public void sendSms(View view)
{
    ...
}

Chúng ta định nghĩa phương thức sendSms() tương ứng như đã khai báo với Button.

SmsManager smsManager = SmsManager.getDefault();

Lớp SmsManager sẽ chịu trách nhiệm việc gửi tin nhắn. Chúng ta không tạo lớp này một cách trực tiếp mà gọi từ phương thức SmsManager.getDefault().

smsManager.sendTextMessage(phoneNumber.getText().toString(),
                    null,
                    content.getText().toString(),
                    null,
                    null);

Để gửi tin nhắn thì chúng ta gọi phương thức SmsManager.sendTextMessage(). Tham số đầu tiên là số điện thoại nhận. Tham số thứ 2 là chuỗi chỉ định địa chỉ của trung tâm tin nhắn (Short Message Service Center – SMSC), về cơ bản thì khi bạn gửi một tin nhắn đến một số điện thoại nào đó, tin nhắn của bạn phải được gửi về trung tâm này rồi trung tâm này sẽ gửi đến số điện thoại đích trong thẻ SIM của bạn, ở đây chúng ta truyền vào null thì phương thức này sẽ sử dụng số SMSC mặc định. Tham số thứ 3 là nội dung tin nhắn truyền đi. Tham số thứ 4 và thứ 5 là đối tượng Intent được gọi khi tin nhắn đã được gửi đi và khi người nhận đã nhận được tin nhắn, ở đây chúng ta truyền vào null.

catch(IllegalArgumentException ex)
{
    Toast.makeText(getApplicationContext(), "Sending SMS failed", Toast.LENGTH_LONG).show();
}

Phương thức sendTextMessage() giải phóng lỗi IllegalArgumentException khi số điện thoại và nội dung tin nhắn nhập vào là rỗng, chúng ta có thể bắt lỗi này để xử lý.

Screenshot_2016-08-15-09-32-38

4 1 vote
Article Rating
Subscribe
Thông báo cho tôi qua email khi
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments