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()
को कॉल किया जाता है.
किसी पीयर डिवाइस से कनेक्ट करने का अनुरोध करने पर, उसी डिवाइस पर एक डायलॉग बॉक्स खुलता है. इस बॉक्स से, उस डिवाइस का उपयोगकर्ता कनेक्ट करने का अनुरोध स्वीकार कर सकता है.
उपयोगकर्ता की अनुमति को बायपास करना
जब उपयोगकर्ता, किसी खास ऐप्लिकेशन के लिए, डिवाइस उस खास ऐक्सेस पॉइंट से जुड़ी अनुमति सेव करता है. अगर ऐप्लिकेशन उस ऐक्सेस पॉइंट से फिर से कनेक्ट करने के लिए कोई अनुरोध करता है, तो डिवाइस, उपयोगकर्ता की अनुमति के चरण को छोड़ देता है और नेटवर्क से अपने-आप कनेक्ट हो जाता है. अगर उपयोगकर्ता यह भूल जाता है एपीआई के अनुरोध पर नेटवर्क से कनेक्ट होने के बाद, इसे सेव किया जाता है ऐप्लिकेशन और नेटवर्क के कॉम्बिनेशन की अनुमति को हटा दिया जाएगा और आने वाले समय में अगर उपयोगकर्ता को ऐप्लिकेशन से जुड़े अनुरोध को फिर से स्वीकार करना हो. अगर ऐप्लिकेशन कोई खास अनुरोध नहीं करता है, जैसे कि SSID या BSSID पैटर्न से. उपयोगकर्ता को अनुरोध स्वीकार करना होगा.
कोड सैंपल
नीचे दिए गए कोड सैंपल में, "test"
के SSID प्रीफ़िक्स और "10:03:23"
के BSSID OUI वाले ओपन नेटवर्क से कनेक्ट करने का तरीका बताया गया है:
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);