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

Cách lấy Sim Operator ID mặc định trên Android

Lấy Sim Operator ID (MCC+MNC) trong Android

Hướng dẫn lấy mã nhà mạng (Sim Operator ID) bao gồm MCC (Mobile Country Code) và MNC (Mobile Network Code) từ thẻ SIM mặc định. Yêu cầu quyền READ_PHONE_STATE.

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);

        // Kiểm tra và yêu cầu quyền
        if (!hasPhonePermissions()) {
            requestPhonePermissions();
        } else {
            showSimOperator();
        }
    }

    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);
    }

    private void showSimOperator() {
        String operator = telephonyManager.getSimOperator(); // Ví dụ: "45202" (Vietnam - Viettel)
        textView.setText("Sim Operator ID: " + operator);
    }

    @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()) {
                showSimOperator();
            } 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 Sim Operator ID

  • Format: MCC (3 chữ số) + MNC (2-3 chữ số).
  • Ví dụ Việt Nam: 452 (MCC Vietnam) + 01 (Mobifone), 02 (Viettel), 04 (Vinaphone).
  • Trả về chuỗi rỗng nếu không có SIM hoặc không đọc được.

Lưu ý Android 10+ (API 29+)

Quyền READ_PHONE_STATE bị hạn chế. Cần khai báo trong manifest và request runtime. Trên Android 11+, một số API telephony yêu cầu quyền READ_PRIVILEGED_PHONE_STATE (chỉ system app).

Chạy ứng dụng

Cấp quyền khi chạy lần đầu. TextView hiển thị Sim Operator ID (ví dụ: 45202).

Cách lấy Sim Operator ID mặc định trên Android