Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Kiểm tra thiết bị hỗ trợ SMS trên Android

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ề true nếu thiết bị có modem và hỗ trợ gửi/nhận SMS.
  • Trả về false cho: 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).

Kiểm tra thiết bị hỗ trợ SMS trên Android