Android 10 (एपीआई लेवल 29) और इसके बाद के वर्शन वाले डिवाइसों पर, पीयर टू पीयर एपीआई का इस्तेमाल किया जा सकता है. इससे Chromecast और Google Home हार्डवेयर जैसे सेकंडरी डिवाइसों के लिए बूटस्ट्रैप कॉन्फ़िगरेशन किया जा सकता है. इस सुविधा की मदद से, आपका ऐप्लिकेशन उपयोगकर्ता को उस ऐक्सेस पॉइंट को बदलने के लिए सूचना दे सकता है जिससे डिवाइस कनेक्ट है. इसके लिए, WifiNetworkSpecifier का इस्तेमाल करके, अनुरोध किए गए नेटवर्क की प्रॉपर्टी के बारे में बताया जाता है.
इस एपीआई का इस्तेमाल करने के लिए, यह तरीका अपनाएं:
WifiNetworkSpecifier.Builderका इस्तेमाल करके, वाई-फ़ाई नेटवर्क स्पेसिफ़ायर बनाएं.कनेक्ट करने के लिए नेटवर्क से मेल खाने वाला नेटवर्क फ़िल्टर सेट करें. साथ ही, ज़रूरी क्रेडेंशियल भी सेट करें.
हर अनुरोध में नेटवर्क फ़िल्टर सेट करने के लिए,
SSID,SSID pattern,BSSID, औरBSSID patternका कॉम्बिनेशन तय करें. हालांकि, इसके लिए ये ज़रूरी शर्तें पूरी होनी चाहिए:- हर अनुरोध में,
SSID,SSID pattern,BSSIDयाBSSID patternमें से कम से कम एक प्रॉपर्टी की वैल्यू दी जानी चाहिए - हर अनुरोध में, सिर्फ़
SSIDयाSSID patternमें से किसी एक को सेट किया जा सकता है - हर अनुरोध में, सिर्फ़
BSSIDयाBSSID patternमें से किसी एक को सेट किया जा सकता है
- हर अनुरोध में,
अनुरोध की स्थिति को ट्रैक करने के लिए, नेटवर्क अनुरोध में स्पेसिफ़ायर और
NetworkCallbackइंस्टेंस जोड़ें.अगर उपयोगकर्ता अनुरोध स्वीकार करता है और नेटवर्क से कनेक्शन बन जाता है, तो कॉलबैक ऑब्जेक्ट पर
NetworkCallback.onAvailable()को शुरू किया जाता है. अगर उपयोगकर्ता अनुरोध को अस्वीकार करता है या नेटवर्क से कनेक्ट नहीं हो पाता है, तो कॉलबैक ऑब्जेक्ट परNetworkCallback.onUnavailable()को शुरू किया जाता है.
किसी दूसरे डिवाइस से कनेक्ट करने का अनुरोध करने पर, उसी डिवाइस पर एक डायलॉग बॉक्स लॉन्च होता है. इस बॉक्स में, डिवाइस का उपयोगकर्ता कनेक्शन के अनुरोध को स्वीकार कर सकता है.
उपयोगकर्ता की मंज़ूरी के बिना
जब कोई उपयोगकर्ता, किसी खास ऐप्लिकेशन के अनुरोध पर किसी नेटवर्क से कनेक्ट करने की अनुमति देता है, तो डिवाइस उस ऐक्सेस पॉइंट के लिए अनुमति को सेव कर लेता है. अगर ऐप्लिकेशन, उस ऐक्सेस पॉइंट से फिर से कनेक्ट करने का अनुरोध करता है, तो डिवाइस उपयोगकर्ता की मंज़ूरी लेने की प्रोसेस को छोड़ देता है. साथ ही, नेटवर्क से अपने-आप कनेक्ट हो जाता है. अगर उपयोगकर्ता, एपीआई से अनुरोध किए गए नेटवर्क से कनेक्ट होने के दौरान नेटवर्क की जानकारी मिटाने का विकल्प चुनता है, तो ऐप्लिकेशन और नेटवर्क के उस कॉम्बिनेशन के लिए सेव की गई मंज़ूरी हटा दी जाती है. साथ ही, ऐप्लिकेशन से किए जाने वाले किसी भी अनुरोध को उपयोगकर्ता को फिर से मंज़ूर करना होगा. अगर ऐप्लिकेशन, एसएसआईडी या बीएसएसआईडी पैटर्न जैसे सामान्य अनुरोध करता है, तो उपयोगकर्ता को अनुरोध स्वीकार करना होगा.
कोड का सैंपल
यहां दिए गए कोड के सैंपल में, "test" एसएसआईडी प्रीफ़िक्स और "10:03:23" बीएसएसआईडी ओयूआई वाले ओपन नेटवर्क से कनेक्ट करने का तरीका बताया गया है:
Kotlin
val specifier = WifiNetworkSpecifier.Builder() .setSsidPattern(PatternMatcher("test", PatternMatcher.PATTERN_PREFIX)) .setBssidPattern(MacAddress.fromString("10:03:23:00:00:00"), MacAddress.fromString("ff:ff:ff:00:00:00")) .build() val request = NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .setNetworkSpecifier(specifier) .build() val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val networkCallback = object : ConnectivityManager.NetworkCallback() { ... override fun onAvailable(network: Network?) { // do success processing here.. } override fun onUnavailable() { // do failure processing here.. } ... } connectivityManager.requestNetwork(request, networkCallback) ... // Release the request when done. connectivityManager.unregisterNetworkCallback(networkCallback)
Java
final NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() .setSsidPattern(new PatternMatcher("test", PatternMatcher.PATTERN_PREFIX)) .setBssidPattern(MacAddress.fromString("10:03:23:00:00:00"), MacAddress.fromString("ff:ff:ff:00:00:00")) .build(); final NetworkRequest request = new NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .setNetworkSpecifier(specifier) .build(); final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); final NetworkCallback networkCallback = new NetworkCallback() { ... @Override void onAvailable(...) { // do success processing here.. } @Override void onUnavailable(...) { // do failure processing here.. } ... }; connectivityManager.requestNetwork(request, networkCallback); ... // Release the request when done. connectivityManager.unregisterNetworkCallback(networkCallback);