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