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ề
falsetrên hầu hết điện thoại hiện nay (chỉ GSM/LTE).
Phân loại mạng di động
| Loại | Công nghệ | Ví dụ |
|---|---|---|
| GSM only | GSM, UMTS, LTE | Đa số điện thoại châu Á, Châu Âu |
| CDMA only | CDMA 1x, EVDO | Verizon/Sprint cũ (đã sunset) |
| World Phone | GSM + CDMA | iPhone 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).
