Giới thiệu
Bài viết này minh họa cách gửi tin nhắn SMS sử dụng SmsManager trên điện thoại Dual SIM trong Android bằng Kotlin.
Các bước thực hiện
Bước 1: Tạo dự án mới
Mở Android Studio, chọn File → New Project và điền đầy đủ thông tin để tạo dự án mới.
Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="4dp"
tools:context=".MainActivity">
<EditText
android:id="@+id/editTextNum"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Nhập số điện thoại"
android:textColor="@android:color/black" />
<EditText
android:id="@+id/editTextMsg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Nhập tin nhắn"
android:textColor="@android:color/black" />
<Button
android:id="@+id/btnSendMsg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="5dp"
android:onClick="sendMessage"
android:text="Gửi tin nhắn" />
</LinearLayout>
Bước 3: Viết logic xử lý (src/MainActivity.kt)
import android.Manifest
import android.content.pm.PackageManager
import android.os.Bundle
import android.telephony.SmsManager
import android.text.TextUtils
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
class MainActivity : AppCompatActivity() {
lateinit var button: Button
lateinit var editTextNumber: EditText
lateinit var editTextMessage: EditText
private val permissionRequest = 101
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
editTextNumber = findViewById(R.id.editTextNum)
editTextMessage = findViewById(R.id.editTextMsg)
button = findViewById(R.id.btnSendMsg)
}
fun sendMessage(view: View) {
val permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS)
if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
myMessage()
} else {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.SEND_SMS), permissionRequest)
}
}
private fun myMessage() {
val myNumber: String = editTextNumber.text.toString().trim()
val myMsg: String = editTextMessage.text.toString().trim()
if (myNumber.isEmpty() || myMsg.isEmpty()) {
Toast.makeText(this, "Trường không được để trống", Toast.LENGTH_SHORT).show()
} else {
if (TextUtils.isDigitsOnly(myNumber)) {
val smsManager: SmsManager = SmsManager.getDefault()
smsManager.sendTextMessage(myNumber, null, myMsg, null, null)
Toast.makeText(this, "Đã gửi tin nhắn", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "Vui lòng nhập số đúng định dạng", Toast.LENGTH_SHORT).show()
}
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == permissionRequest) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
myMessage()
} else {
Toast.makeText(this, "Bạn không có quyền gửi tin nhắn", Toast.LENGTH_SHORT).show()
}
}
}
}
Bước 4: Cấu hình Manifest (androidManifest.xml)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.q11">
<uses-permission android:name="android.permission.SEND_SMS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
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>
Chạy ứng dụng
Kết nối thiết bị Android thực với máy tính. Trong Android Studio, mở file activity và nhấn biểu tượng Run trên thanh công cụ. Chọn thiết bị di động của bạn và kiểm tra màn hình hiển thị.
Lưu ý Dual SIM:SmsManager.getDefault()dùng SIM mặc định. Android 5.1+ (API 22) cóSmsManager.getSmsManagerForSubscriptionId(subId)để chọn SIM cụ thể. CầnSubscriptionManagerđể lấy subId.