पीयर-टू-पीयर कनेक्टिविटी के लिए वाई-फ़ाई नेटवर्क के अनुरोध का एपीआई

Android 10 (एपीआई लेवल 29) और उसके बाद के वर्शन वाले डिवाइसों पर, नए पीयर-टू-पीयर एपीआई का इस्तेमाल करके, इन कामों को किया जा सकता है Chromecast और Google Home जैसे दूसरे डिवाइसों के लिए बूटस्ट्रैप कॉन्फ़िगरेशन हार्डवेयर. इस सुविधा की मदद से, आपका ऐप्लिकेशन लोगों को ऐक्सेस बदलने का अनुरोध करता है प्वाइंट करें कि इसका उपयोग करके डिवाइस WifiNetworkSpecifier का इस्तेमाल, अनुरोध किए गए नेटवर्क की प्रॉपर्टी के बारे में बताने के लिए किया जा सकता है.

इस एपीआई का इस्तेमाल करने के लिए, ये काम करें:

  1. इसका इस्तेमाल करके वाई-फ़ाई नेटवर्क स्पेसिफ़िकेशन बनाएं WifiNetworkSpecifier.Builder.

  2. ज़रूरी नेटवर्क से कनेक्ट करने के लिए, नेटवर्क फ़िल्टर सेट करें क्रेडेंशियल डालें.

  3. तय करें कि लोगों को SSID का कौनसा कॉम्बिनेशन इस्तेमाल करना है. SSID pattern, BSSID, और BSSID pattern हर अनुरोध में नेटवर्क फ़िल्टर सेट करने के लिए: ज़रूरतें:

    • हर अनुरोध में SSID, SSID pattern, BSSID या BSSID pattern
    • हर अनुरोध, SSID या SSID pattern में से सिर्फ़ एक को सेट कर सकता है
    • हर अनुरोध, BSSID या BSSID pattern में से सिर्फ़ एक को सेट कर सकता है
  4. नेटवर्क अनुरोध में स्पेसिफ़िकेशन के साथ-साथ, NetworkCallback इंस्टेंस आपके अनुरोध की स्थिति को ट्रैक करने के लिए होता है.

    अगर उपयोगकर्ता अनुरोध स्वीकार कर लेता है और नेटवर्क से कनेक्शन हो गया, NetworkCallback.onAvailable() कॉलबैक ऑब्जेक्ट पर शुरू होता है. अगर उपयोगकर्ता अनुरोध को अस्वीकार कर देता है या नेटवर्क से कनेक्ट नहीं किया जा सका, NetworkCallback.onUnavailable() कॉलबैक ऑब्जेक्ट पर शुरू होता है.

साथी डिवाइस से कनेक्ट करने का अनुरोध भेजने पर, उसी डिवाइस से जुड़ा हो जिससे उस डिवाइस का उपयोगकर्ता, कनेक्शन का अनुरोध स्वीकार कर सके.

उपयोगकर्ता की मंज़ूरी को बायपास करना

जब उपयोगकर्ता, किसी खास ऐप्लिकेशन के लिए, डिवाइस उस खास ऐक्सेस पॉइंट से जुड़ी अनुमति सेव करता है. अगर ऐप्लिकेशन उस ऐक्सेस पॉइंट से दोबारा कनेक्ट करने का विकल्प चुनने पर, डिवाइस उपयोगकर्ता की मंज़ूरी वाले चरण को छोड़ देता है और अपने-आप ही नेटवर्क से कनेक्ट हो जाता है. अगर उपयोगकर्ता यह भूल जाता है एपीआई के अनुरोध पर नेटवर्क से कनेक्ट होने के बाद, इसे सेव किया जाता है ऐप्लिकेशन और नेटवर्क के कॉम्बिनेशन की अनुमति को हटा दिया जाएगा और आने वाले समय में अगर उपयोगकर्ता को ऐप्लिकेशन से जुड़े अनुरोध को फिर से स्वीकार करना हो. अगर ऐप्लिकेशन कोई खास अनुरोध नहीं करता है, जैसे कि SSID या BSSID पैटर्न से. उपयोगकर्ता को अनुरोध स्वीकार करना होगा.

कोड सैंपल

नीचे दिया गया कोड सैंपल, SSID के ज़रिए किसी ओपन नेटवर्क से कनेक्ट करने का तरीका बताता है "test" का प्रीफ़िक्स और "10:03:23" का BSSID ओयूआई:

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);