পিয়ার-টু-পিয়ার সংযোগের জন্য Wi-Fi নেটওয়ার্ক অনুরোধ API

অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) এবং উচ্চতর ডিভাইসগুলিতে, আপনি Chromecast এবং Google Home হার্ডওয়্যারের মতো সেকেন্ডারি ডিভাইসের জন্য বুটস্ট্র্যাপ কনফিগারেশনের জন্য একটি নতুন পিয়ার টু পিয়ার API ব্যবহার করতে পারেন। এই বৈশিষ্ট্যটি আপনার অ্যাপটিকে অনুরোধ করা নেটওয়ার্কের বৈশিষ্ট্যগুলি বর্ণনা করার জন্য WifiNetworkSpecifier ব্যবহার করে ডিভাইসটি সংযুক্ত অ্যাক্সেস পয়েন্টটি পরিবর্তন করতে ব্যবহারকারীকে অনুরোধ করতে সক্ষম করে।

এই API ব্যবহার করতে, নিম্নলিখিতগুলি করুন:

  1. WifiNetworkSpecifier.Builder ব্যবহার করে একটি Wi-Fi নেটওয়ার্ক স্পেসিফায়ার তৈরি করুন।

  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() আহ্বান করা হয়।

একটি পিয়ার ডিভাইসের সাথে সংযোগের অনুরোধ শুরু করলে একই ডিভাইসে একটি ডায়ালগ বক্স চালু হয়, যেখান থেকে সেই ডিভাইসের ব্যবহারকারী সংযোগের অনুরোধ গ্রহণ করতে পারেন।

ব্যবহারকারীর অনুমোদন এড়িয়ে যাওয়া

ব্যবহারকারী যখন কোনও নির্দিষ্ট অ্যাপের অনুরোধের জবাবে কোনও নেটওয়ার্ক সংযোগের জন্য অনুমোদন করেন, তখন ডিভাইসটি সেই নির্দিষ্ট অ্যাক্সেস পয়েন্টের অনুমোদন সংরক্ষণ করে। যদি অ্যাপটি আবার সেই অ্যাক্সেস পয়েন্টে সংযোগ করার জন্য একটি নির্দিষ্ট অনুরোধ করে, তাহলে ডিভাইসটি ব্যবহারকারীর অনুমোদনের পর্যায়টি এড়িয়ে যায় এবং স্বয়ংক্রিয়ভাবে নেটওয়ার্কের সাথে সংযোগ স্থাপন করে। যদি ব্যবহারকারী API দ্বারা অনুরোধ করা কোনও নেটওয়ার্কের সাথে সংযুক্ত থাকাকালীন নেটওয়ার্কটি ভুলে যেতে চান, তাহলে অ্যাপ এবং নেটওয়ার্কের সেই সংমিশ্রণের জন্য এই সংরক্ষিত অনুমোদনটি সরিয়ে ফেলা হয় এবং অ্যাপ থেকে ভবিষ্যতের যেকোনো অনুরোধ ব্যবহারকারীকে আবার অনুমোদন করতে হবে। যদি অ্যাপটি কোনও অ-নির্দিষ্ট অনুরোধ করে, যেমন SSID বা BSSID প্যাটার্ন সহ, তাহলে ব্যবহারকারীকে অনুরোধটি অনুমোদন করতে হবে।

কোড নমুনা

নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে "test" এর SSID উপসর্গ এবং "10:03:23" এর BSSID OUI সহ একটি খোলা নেটওয়ার্কের সাথে সংযোগ করতে হয়:

কোটলিন

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)

জাভা

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