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

Android 10 (API লেভেল 29) এবং উচ্চতর ডিভাইসগুলিতে, আপনি 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);