Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड में सिम सर्विस जानकारी कैसे प्राप्त करें?

एंड्रॉइड में सिम सर्विस स्टेट (नेटवर्क स्थिति) प्राप्त करना

यह ट्यूटोरियल दिखाता है कि TelephonyManager.getServiceState() का उपयोग करके सिम कार्ड की नेटवर्क सर्विस स्थिति कैसे प्राप्त करें।

चरण 1: नया प्रोजेक्ट बनाएं

Android Studio में File → New Project चुनें।

चरण 2: लेआउट (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: MainActivity कोड (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.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
import static android.Manifest.permission.READ_PHONE_NUMBERS;
import static android.Manifest.permission.READ_PHONE_STATE;
import static android.Manifest.permission.READ_SMS;

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 (ActivityCompat.checkSelfPermission(this, READ_SMS) != PackageManager.PERMISSION_GRANTED &&
            ActivityCompat.checkSelfPermission(this, READ_PHONE_NUMBERS) != PackageManager.PERMISSION_GRANTED &&
            ActivityCompat.checkSelfPermission(this, ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
            ActivityCompat.checkSelfPermission(this, READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            
            ActivityCompat.requestPermissions(this, 
                new String[]{READ_SMS, READ_PHONE_NUMBERS, READ_PHONE_STATE, ACCESS_COARSE_LOCATION}, 
                PERMISSION_REQUEST_CODE);
        } else {
            updateServiceState();
        }
    }

    @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) {
            boolean granted = ActivityCompat.checkSelfPermission(this, READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED ||
                              ActivityCompat.checkSelfPermission(this, READ_PHONE_NUMBERS) == PackageManager.PERMISSION_GRANTED;
            if (granted) {
                updateServiceState();
            } else {
                textView.setText("परमिशन अस्वीकृत");
            }
        }
    }

    private void updateServiceState() {
        ServiceState serviceState = telephonyManager.getServiceState();
        StringBuilder info = new StringBuilder();
        
        info.append("सर्विस स्टेट: ").append(getServiceStateName(serviceState.getState())).append("\n");
        info.append("वॉइस रेग स्टेट: ").append(getRegStateName(serviceState.getVoiceRegState())).append("\n");
        info.append("डेटा रेग स्टेट: ").append(getRegStateName(serviceState.getDataRegState())).append("\n");
        info.append("ऑपरेटर: ").append(serviceState.getOperatorAlphaLong()).append("\n");
        info.append("ऑपरेटर न्यूमेरिक: ").append(serviceState.getOperatorNumeric()).append("\n");
        info.append("रोमिंग: ").append(serviceState.getRoaming() ? "हां" : "नहीं").append("\n");
        info.append("इमरजेंसी ओनली: ").append(serviceState.isEmergencyOnly() ? "हां" : "नहीं");
        
        textView.setText(info.toString());
    }

    private String getServiceStateName(int state) {
        switch (state) {
            case ServiceState.STATE_IN_SERVICE: return "सेवा में (In Service)";
            case ServiceState.STATE_OUT_OF_SERVICE: return "सेवा से बाहर (Out of Service)";
            case ServiceState.STATE_EMERGENCY_ONLY: return "केवल इमरजेंसी";
            case ServiceState.STATE_POWER_OFF: return "पावर ऑफ";
            default: return "अज्ञात (" + state + ")";
        }
    }

    private String getRegStateName(int state) {
        switch (state) {
            case ServiceState.REG_STATE_HOME: return "होम नेटवर्क";
            case ServiceState.REG_STATE_ROAMING: return "रोमिंग";
            case ServiceState.REG_STATE_SEARCHING: return "खोज रहा है";
            case ServiceState.REG_STATE_DENIED: return "अस्वीकृत";
            case ServiceState.REG_STATE_UNKNOWN: return "अज्ञात";
            default: return "कोड: " + state;
        }
    }
}

चरण 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.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <application ...> ... </application>
</manifest>

महत्वपूर्ण जानकारी

  • ACCESS_COARSE_LOCATION एंड्रॉइड 12+ (API 31+) पर फोन स्टेट के लिए आवश्यक है
  • ServiceState ऑब्जेक्ट विस्तृत नेटवर्क जानकारी देता है
  • READ_SMS यहां अनावश्यक है
  • डुअल सिम के लिए createForSubscriptionId(subId) उपयोग करें
  • कोई सिम न होने पर STATE_OUT_OF_SERVICE लौटाता है

ServiceState स्टेट्स

कॉन्स्टेंटअर्थ
STATE_IN_SERVICEसामान्य नेटवर्क सेवा उपलब्ध
STATE_OUT_OF_SERVICEकोई नेटवर्क नहीं
STATE_EMERGENCY_ONLYकेवल इमरजेंसी कॉल संभव
STATE_POWER_OFFरेडियो बंद

ऐप चलाएं

डिवाइस पर चलाएं - वर्तमान नेटवर्क ऑपरेटर, रोमिंग स्थिति, रजिस्ट्रेशन स्टेट आदि दिखेगा।

  1. एंड्रॉइड में डिवाइस आईडी कैसे प्राप्त करें? एंड्रॉइड में डिवाइस आईडी कैसे प्राप्त करें?

    एंड्रॉइड में डिवाइस आईडी प्राप्त करने का पूरा गाइड यह ट्यूटोरियल आपको एंड्रॉइड ऐप में डिवाइस की यूनिक आईडी (IMEI/MEID) प्राप्त करना सिखाता है। ध्यान दें कि एंड्रॉइड 10 (API 29) से Google ने डिवाइस आईडी एक्सेस पर प्रतिबंध लगा दिए हैं, इसलिए आधुनिक ऐप्स को अन्य पहचानकर्ताओं का उपयोग करना चाहिए। चरण 1

  1. एंड्रॉइड में रूट डायरेक्टरी जानकारी कैसे प्राप्त करें एंड्रॉइड में रूट डायरेक्टरी जानकारी कैसे प्राप्त करें

    सिस्टम रूट डायरेक्टरी का पूर्ण पथ प्राप्त करना Environment.getRootDirectory() से एंड्रॉइड सिस्टम के रूट डायरेक्टरी का पूर्ण पथ प्राप्त करें। चरण 1-2: प्रोजेक्ट और लेआउट मानक सेटअप। चरण 3: MainActivity.java package com.example.myapplication; import android.os.Build; import android.os.Bundle; impor

  1. Android में थ्रेड ग्रुप जानकारी कैसे प्राप्त करें? Android में थ्रेड ग्रुप जानकारी कैसे प्राप्त करें?

    Android में थ्रेड ग्रुप जानकारी प्राप्त करना उदाहरण में जाने से पहले, हमें पता होना चाहिए कि थ्रेड क्या है। एक थ्रेड एक हल्का सब-प्रोसेस है, यह UI को बाधित किए बिना बैकग्राउंड ऑपरेशन करने जा रहा है। यह उदाहरण दर्शाता है कि Android में थ्रेड ग्रुप जानकारी कैसे प्राप्त करें। चरण 1: नया प्रोजेक्ट बनाए