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

Android में प्रोग्रामेटिक रूप से Wi-Fi नेटवर्क स्कैन करें

यह गाइड Android में WifiManager API का उपयोग करके प्रोग्रामेटिक Wi-Fi नेटवर्क स्कैनिंग को कवर करता है। यह Android 6.0+ के लिए आवश्यक रनटाइम अनुमति प्रवाह, स्कैन ट्रिगरिंग और परिणाम प्रसंस्करण पर केंद्रित है।

मुख्य API घटक

  • WifiManager - Wi-Fi संचालन के लिए केंद्रीय वर्ग
  • ScanResult - एक पहचाने गए एक्सेस पॉइंट का प्रतिनिधित्व करता है
  • BroadcastReceiver - असिंक्रोनस स्कैन पूरा होने की घटनाओं को सुनता है
  • SCAN_RESULTS_AVAILABLE_ACTION - परिणाम तैयार होने पर प्रसारित Intent Action

आवश्यक अनुमतियाँ (Manifest)

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

स्कैनिंग कार्यान्वयन

1. WifiManager प्राप्त करें

WifiManager wifiManager = (WifiManager) getApplicationContext()
        .getSystemService(Context.WIFI_SERVICE);

2. सुनिश्चित करें कि Wi-Fi सक्षम है

if (wifiManager != null && !wifiManager.isWifiEnabled()) {
    wifiManager.setWifiEnabled(true);
    // नोट: Android 10+ पर, ऐप्स सीधे Wi-Fi सक्षम/अक्षम नहीं कर सकते
    // उपयोगकर्ता को सेटिंग्स के माध्यम से सक्षम करने के लिए प्रेरित करें
}

3. स्थान अनुमति जांचें/अनुरोध करें (API 23+)

private static final int PERM_REQUEST = 1001;

private void checkPermissionAndScan() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERM_REQUEST);
        } else {
            triggerScan();
        }
    } else {
        triggerScan();
    }
}

private void triggerScan() {
    if (wifiManager != null) {
        boolean started = wifiManager.startScan();
        if (!started) {
            // स्कैन थ्रॉटेल्ड या विफल
        }
    }
}

4. BroadcastReceiver के साथ परिणाम प्राप्त करें

private BroadcastReceiver scanReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())) {
            List results = wifiManager.getScanResults();
            processResults(results);
        }
    }
};

private void processResults(List results) {
    for (ScanResult result : results) {
        String ssid = result.SSID;
        String bssid = result.BSSID;
        int level = result.level; // dBm में सिग्नल शक्ति
        int frequency = result.frequency; // MHz में चैनल आवृत्ति
        String capabilities = result.capabilities; // सुरक्षा प्रोटोकॉल
        // UI अपडेट करें, RecyclerView एडाप्टर, आदि।
    }
}

5. रिसीवर जीवनचक्र प्रबंधन

@Override
protected void onResume() {
    super.onResume();
    IntentFilter filter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
    registerReceiver(scanReceiver, filter);
}

@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(scanReceiver);
}

6. अनुमति परिणाम संभालें

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == PERM_REQUEST && grantResults.length > 0
            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        triggerScan();
    }
}

ScanResult उपयोगी फ़ील्ड

फ़ील्डप्रकारविवरण
SSIDStringनेटवर्क नाम (उद्धृत)
BSSIDStringMAC पता
levelintसिग्नल शक्ति (dBm, ऋणात्मक)
frequencyintचैनल आवृत्ति (MHz)
capabilitiesStringसुरक्षा: WPA2, WEP, खुला, आदि।
timestamplongस्कैन समय (बूट के बाद नैनोसेकंड)

सिग्नल शक्ति व्याख्या

  • > -50 dBm: उत्कृष्ट
  • -50 से -60 dBm: अच्छा
  • -60 से -70 dBm: उचित
  • -70 से -80 dBm: कमजोर
  • < -80 dBm: बहुत कमजोर

Android संस्करण-विशिष्ट व्यवहार

Android संस्करणव्यवहार
Android 6-9 (API 23-28)मानक स्कैनिंग, स्थान अनुमति आवश्यक
Android 10 (API 29)गैर-सिस्टम ऐप्स के लिए स्कैन थ्रॉटेलिंग; requestScan() पेश किया गया
Android 11+ (API 30+)सख्त अनुमति प्रवर्तन; ACCESS_FINE_LOCATION पसंदीदा
Android 12+ (API 31+)अतिरिक्त गोपनीयता प्रतिबंध; आस-पास के डिवाइस अनुमति विकल्प

सर्वोत्तम अभ्यास

  1. जीवनचक्र में रिसीवर पंजीकृत करें - onResume()/onPause() में, onCreate()/onDestroy() में नहीं
  2. थ्रॉटेलिंग का सम्मान करें - लगातार स्कैन अनुरोध न करें
  3. परिणामों को कैश करें - हर स्कैन पर UI अपडेट करने से बचें
  4. खाली परिणामों को संभालें - उपयोगकर्ता को सूचित करें यदि कोई नेटवर्क नहीं मिला
  5. RecyclerView का उपयोग करें - बड़ी सूचियों के लिए ListView से बेहतर

निष्कर्ष

Android में प्रोग्रामेटिक Wi-Fi स्कैनिंग के लिए उचित अनुमति प्रबंधन, जीवनचक्र-जागरूक BroadcastReceiver पंजीकरण, और Android संस्करण-विशिष्ट व्यवहार की समझ की आवश्यकता होती है। यह पैटर्न Wi-Fi विश्लेषक ऐप्स, ऑटो-कनेक्ट सुविधाओं और नेटवर्क डायग्नोस्टिक टूल्स का आधार बनाता है।

  1. Android में प्रोग्रामेटिकली WiFi चालू/बंद कैसे करें? Android में प्रोग्रामेटिकली WiFi चालू/बंद कैसे करें?

    Android ऐप से WiFi को प्रोग्रामेटिकली ऑन/ऑफ करना यह उदाहरण दिखाता है कि कैसे एक Switch विजेट का उपयोग करके WiFi को चालू और बंद किया जाए। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनें। चरण 2: लेआउट में Switch और TextView जोड़ें res/layout/activity_main.xml: <?xml version

  1. Android में बटन क्लिक पर WiFi प्रोग्रामेटिकली ऑन/ऑफ कैसे करें? Android में बटन क्लिक पर WiFi प्रोग्रामेटिकली ऑन/ऑफ कैसे करें?

    Android में WifiManager से WiFi टॉगल करना (बटन ऑनक्लिक) दो बटनों (On/Off) का उपयोग करके WiFi चालू/बंद करने का सरल उदाहरण। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project। चरण 2: लेआउट में दो बटन res/layout/activity_main.xml: <?xml version=1.0 encoding=utf-8?> <LinearLayou

  1. Android ऐप को प्रोग्रामेटिकली कैसे बंद करें? Android ऐप को प्रोग्रामेटिकली कैसे बंद करें?

    यह उदाहरण दर्शाता है कि Android ऐप को बटन क्लिक पर प्रोग्रामेटिकली कैसे बंद किया जाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project। चरण 2: लेआउट XML res/layout/activity_main.xml: <?xml version=1.0 encoding=utf-8?> <RelativeLayout xmlns:android=https://schemas