Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีดึง Network Operator Name เริ่มต้นใน Android

การดึงชื่อ Network Operator (Carrier Name) ผ่าน TelephonyManager

ตัวอย่างสาธิตการใช้ getNetworkOperatorName() เพื่อดึงชื่อผู้ให้บริการเครือข่ายปัจจุบัน (เช่น "AIS", "TrueMove H", "DTAC") มาแสดง

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

Android Studio → File → New Project

ขั้นตอนที่ 2: Layout XML (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:gravity="center"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <TextView
        android:id="@+id/text"
        android:textSize="30sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

ขั้นตอนที่ 3: 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" />
    <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />

    <application ...>
        <activity android:name=".MainActivity"> ... </activity>
    </application>
</manifest>

ขั้นตอนที่ 4: โค้ด Java (src/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);
        checkPermissionAndFetch();
    }

    private void checkPermissionAndFetch() {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.READ_PHONE_STATE}, PERMISSION_REQUEST_CODE);
        } else {
            fetchNetworkOperatorName();
        }
    }

    private void fetchNetworkOperatorName() {
        // getNetworkOperatorName() คืนค่าชื่อ Carrier (String)
        String operatorName = telephonyManager.getNetworkOperatorName();
        textView.setText("Network Operator: " + (operatorName != null ? operatorName : "ไม่พบข้อมูล"));
    }

    @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 (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                fetchNetworkOperatorName();
            } else {
                textView.setText("Permission denied");
            }
        }
    }
}

การทดสอบ

รันแอป อนุญาต Permission จะแสดงชื่อเครือข่าย เช่น AIS, TrueMove H, DTAC, NT

วิธีดึง Network Operator Name เริ่มต้นใน Android

Network Operator Name vs Sim Operator Name

เมธอดคืนค่าความหมาย
getNetworkOperatorName()String (เช่น "AIS")เครือข่ายที่ เชื่อมต่ออยู่ตอนนี้ (Current registered network)
getSimOperatorName()String (เช่น "AIS")เครือข่ายที่ SIM 属于 (Home network ของ SIM)

สถานการณ์ที่ต่างกัน: เมื่อ Roaming - Network Operator = เครือข่ายท้องถิ่น, Sim Operator = เครือข่ายบ้าน

ข้อมูล Network Operator ที่เกี่ยวข้อง

// รหัสตัวเลข MCC+MNC ของเครือข่ายปัจจุบัน
String numeric = telephonyManager.getNetworkOperator(); // "52001"

// ชื่อเครือข่ายปัจจุบัน
String name = telephonyManager.getNetworkOperatorName(); // "AIS"

// รหัสประเทศของเครือข่ายปัจจุบัน (ISO 3166-1 alpha-2)
String countryIso = telephonyManager.getNetworkCountryIso(); // "th"

// ตรวจสอบ Roaming
boolean roaming = telephonyManager.isNetworkRoaming();

ข้อควรระวัง

  • คืนค่า null หรือ String ว่าง ถ้าไม่มี SIM หรือไม่ได้เชื่อมต่อเครือข่าย
  • ชื่อขึ้นอยู่กับข้อมูลใน SIM/Modem อาจไม่ตรงกับ Brand ที่ User คุ้นเคย
  • Dual SIM: ใช้ createForSubscriptionId() เพื่อเลือก SIM
  • Android 10+ อาจจำกัดข้อมูลบางอย่าง

โค้ดรองรับ Dual SIM (API 22+)

SubscriptionManager subManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
List<SubscriptionInfo> subs = subManager.getActiveSubscriptionInfoList();
for (SubscriptionInfo sub : subs) {
    TelephonyManager tm = telephonyManager.createForSubscriptionId(sub.getSubscriptionId());
    String name = tm.getNetworkOperatorName();
    String numeric = tm.getNetworkOperator();
    Log.d(TAG, "SIM " + sub.getDisplayName() + ": " + name + " (" + numeric + ")");
}