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

Kiểm tra thiết bị World Phone (hỗ trợ toàn cầu) trên Android

Kiểm tra World Phone (isWorldPhone) trong Android

Hướng dẫn dùng TelephonyManager.isWorldPhone() để xác định thiết bị có hỗ trợ cả mạng GSM và CDMA (global phone) hay không. Thường thấy trên thiết bị Verizon/Sprint cũ hoặc international roaming devices.

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 {
            showWorldPhone();
        }
    }

    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 showWorldPhone() {
        boolean isWorld = telephonyManager.isWorldPhone();
        textView.setText("World Phone (GSM+CDMA): " + (isWorld ? "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()) {
                showWorldPhone();
            } 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 World Phone

  • World Phone: Thiết bị hỗ trợ cả GSM (UMTS/LTE) và CDMA (1xRTT/EVDO).
  • Phổ biến trên: Thiết bị Verizon, Sprint (Mỹ) được bán quốc tế; một số flagship Samsung, iPhone, Pixel đời cũ.
  • Cho phép dùng SIM quốc tế (GSM) khi du lịch, đồng thời dùng CDMA tại nhà.
  • Trả về false trên hầu hết điện thoại hiện nay (chỉ GSM/LTE).

Phân loại mạng di động

LoạiCông nghệVí dụ
GSM onlyGSM, UMTS, LTEĐa số điện thoại châu Á, Châu Âu
CDMA onlyCDMA 1x, EVDOVerizon/Sprint cũ (đã sunset)
World PhoneGSM + CDMAiPhone 4S-6, Galaxy S4-S7 (model Verizon)

Chạy ứng dụng

Cấp quyền → TextView hiển thị "World Phone: KHÔNG" (trên hầu hết thiết bị hiện tại).

Kiểm tra thiết bị World Phone (hỗ trợ toàn cầu) trên Android