Kiểm tra khả năng SMS (isSmsCapable) trong Android
Hướng dẫn dùng TelephonyManager.isSmsCapable() để kiểm tra thiết bị có hỗ trợ chức năng SMS hay không (máy tính bảng chỉ có WiFi thường trả về false).
Bước 1: Tạo dự án mới
Android Studio → File → New Project.
Bước 2: 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:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<TextView
android:id="@+id/text"
android:textSize="30sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Bước 3: Code logic (java/MainActivity.java)
package com.example.myapplication;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.telephony.TelephonyManager;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private static final int PERMISSION_REQUEST_CODE = 100;
TextView textView;
TelephonyManager telephonyManager;
@RequiresApi(api = Build.VERSION_CODES.P)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.text);
telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (!hasPhonePermissions()) {
requestPhonePermissions();
} else {
showSmsCapable();
}
}
private boolean hasPhonePermissions() {
return ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED;
}
private void requestPhonePermissions() {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_PHONE_STATE},
PERMISSION_REQUEST_CODE);
}
@RequiresApi(api = Build.VERSION_CODES.P)
private void showSmsCapable() {
boolean capable = telephonyManager.isSmsCapable();
textView.setText("Hỗ trợ SMS: " + (capable ? "CÓ" : "KHÔNG"));
}
@RequiresApi(api = Build.VERSION_CODES.P)
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE) {
if (hasPhonePermissions()) {
showSmsCapable();
} else {
textView.setText("Cần cấp quyền READ_PHONE_STATE");
}
}
}
}
Bước 4: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application ...>
<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>
Giải thích isSmsCapable()
- Trả về
truenếu thiết bị có modem và hỗ trợ gửi/nhận SMS. - Trả về
falsecho: tablet chỉ WiFi, thiết bị IoT không modem, máy tính bảng dữ liệu-only. - Không yêu cầu SIM đang hoạt động, chỉ kiểm tra khả năng phần cứng/mềm.
Phương thức liên quan
telephonyManager.isVoiceCapable() // Hỗ trợ gọi thoại telephonyManager.isDataCapable() // Hỗ trợ dữ liệu di động telephonyManager.isWorldPhone() // Hỗ trợ cả GSM và CDMA (xem bài sau)
Chạy ứng dụng
Cấp quyền → TextView hiển thị "Hỗ trợ SMS: CÓ" (điện thoại) hoặc "KHÔNG" (tablet WiFi only).
