Tài trợ bài viết này và giới thiệu dịch vụ, sản phẩm, thương hiệu, nhu cầu tuyển dụng của doanh nghiệp đến với cộng đồng.
La Kiến Vinh Với Android, có những cú pháp tin nhắn thay vì bắt người sử dụng cuối phải vào phần tin nhắn và soạn tin nhắn để gửi. Như vậy sẽ bất tiện nếu như sản phẩm của chúng ta là 1 sản phẩm đóng và muốn tạo điều kiện cho người sử dụng gửi 1 số tin nhắn với cú pháp cố định.
Nội dung bài viết

Giới thiệu

Có những sản phẩm cố định ta cần gửi nội dung tin nhắn và số điện thoại cố định như cú pháp đến tổng đài tại bên trong ứng dụng của chúng ta, điều này giúp cho trải nghiệm người dùng tốt hơn việc họ phải mở ứng dụng gửi tin nhắn của hệ điều hành và giúp cho nhà phát triển có thể dễ dàng hơn trong việc giảm thiểu sự thay đổi quyết định mua hàng của người dùng cuối.

Vấn đề là không phải lúc nào ta cũng có server và người dùng cuối có mạng, để giúp họ điều khiển thiết bị ta sẽ có nhiều lựa chọn hơn cho họ, và SMS hay cuộc gọi là 1 trong những tính năng giúp kích hoạt việc thanh toán hoặc kích hoạt 1 hệ thống này miễn là hệ thống đó có thể giao tiếp qua SMS.

Trong bài viết này, tôi không chịu trách nhiệm thiết kế phần nhận tin nhắn và kích hoạt hệ thống thanh toán hoặc tự động hóa, tôi chỉ viết về phần gửi tin nhắn và tạo ra cuộc gọi đến 1 số điện thoại định sẵn.

Chuẩn bị môi trường và tạo project Android

Thực hiện cuộc gọi

Thực hiện cuộc gọi có thể bắt đầu từ Android API level 1.

Import các package cần thiết, trong trường hợp này sử dụng Intent, Uri, và Exception, cơ bản bạn quan tâm đến Intent và Uri.

import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;

Thực hiện cuộc gọi

private void call() {
	try {
		String phoneNumber = "0933310128";

		Intent it = new Intent(Intent.ACTION_CALL);
		it.setData(Uri.parse("tel:" + phoneNumber));
		startActivity(it);
	}
	catch (ActivityNotFoundException e) {
		// Exceptions
	}
}

Khi muốn sử dụng tính năng cuộc gọi, ứng dụng phải thông báo cho người sử dụng cuối rằng nó có sử dụng tính năng này, do đó ta thêm vào khai báo sử dụng tính năng này vào AndroidManifest.xml - <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            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>
	
    <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>

</manifest>

Gửi tin nhắn SMS

Gửi tin nhắn

Từ Android API level 4 đã hỗ trợ SmsManager

Import các package cần thiết cho việc gửi SMS

import android.telephony.SmsManager;

Ra lệnh gửi SMS với số điện thoại là phoneNumber (String) và tin nhắn message (String) muốn gửi

SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, null, null);

Vấn đề bảo mật - khi muốn sử dụng tính năng này, bắt buộc ta phải thông báo cho người dùng cuối biết rằng ta sử dụng tính năng SMS của họ, bằng cách thêm vào AndroidManifest.xml của project, đặt dòng <uses-permission android:name="android.permission.SEND_SMS"/> ngoài thẻ application ví dụ

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            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>
	
    <uses-permission android:name="android.permission.SEND_SMS"/>

</manifest>

Nâng cao

Với code trên ta đã đủ để gửi 1 tin nhắn đến người dùng, nâng cao hơn ta có thể kiểm tra thêm trạng thái tin nhắn đã gửi như thế nào? Và người dùng đã nhận chưa (nhận như thế nào). Quay trở lại code gửi tin nhắn, ta thêm vào sentPI và deliveredPI là

SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);

Code đầy đủ sẽ là

private void sendSMS(String phoneNumber, String message)
{
	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:
					// SMS sent
					
					break;
				case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
					// SMS fail without reason
					
					break;
				case SmsManager.RESULT_ERROR_NO_SERVICE:
					// No service
					
					break;
				case SmsManager.RESULT_ERROR_NULL_PDU:
					// Null PDU
					
					break;
				case SmsManager.RESULT_ERROR_RADIO_OFF:
					// Radio off
					
					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:
					// SMS delivered"
					
					break;
				case Activity.RESULT_CANCELED:
					// SMS not delivered
					
					break;
			}
		}
	}, new IntentFilter(DELIVERED));

	SmsManager sms = SmsManager.getDefault();
	sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
}
THẢO LUẬN
ĐÓNG