Android ১০ (API লেভেল ২৯) এবং তার পরবর্তী ভার্সনের ডিভাইসে, আপনি Chromecast এবং Google Home হার্ডওয়্যারের মতো সেকেন্ডারি ডিভাইসের জন্য বুটস্ট্র্যাপ কনফিগারেশন করতে একটি নতুন পিয়ার টু পিয়ার API ব্যবহার করতে পারবেন। এই ফিচার আপনার অ্যাপকে ব্যবহারকারীকে অনুরোধ করা নেটওয়ার্কের প্রপার্টি বর্ণনা করার জন্য
WifiNetworkSpecifier
ব্যবহার করে ডিভাইস যে অ্যাক্সেস পয়েন্টের সাথে কানেক্ট করা আছে তা পরিবর্তন করার জন্য প্রম্পট করতে দেয়।
এই API ব্যবহার করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
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()চালু করা হয়।
কোনও পিয়ার ডিভাইসে কানেক্ট করার অনুরোধ শুরু করলে, একই ডিভাইসে একটি ডায়ালগ বক্স চালু হয়, যেখান থেকে সেই ডিভাইসের ব্যবহারকারী কানেকশনের অনুরোধ গ্রহণ করতে পারেন।
ব্যবহারকারীর অনুমোদন বাইপাস করা হচ্ছে
নির্দিষ্ট অ্যাপ থেকে অনুরোধের উত্তরে ব্যবহারকারী কোনও নেটওয়ার্কে কানেক্ট করার অনুমোদন দিলে, ডিভাইসটি নির্দিষ্ট অ্যাক্সেস পয়েন্টের জন্য অনুমোদন স্টোর করে। অ্যাপটি যদি সেই অ্যাক্সেস পয়েন্টে আবার কানেক্ট করার জন্য নির্দিষ্ট অনুরোধ করে, তাহলে ডিভাইসটি ব্যবহারকারীর অনুমোদনের ধাপটি এড়িয়ে যায় এবং অটোমেটিক নেটওয়ার্কে কানেক্ট হয়ে যায়। API-এর অনুরোধ করা নেটওয়ার্কে কানেক্ট থাকা অবস্থায় ব্যবহারকারী যদি নেটওয়ার্ক ভুলে যাওয়ার বিকল্প বেছে নেন, তাহলে অ্যাপ ও নেটওয়ার্কের সেই কম্বিনেশনের জন্য অনুমোদন সরিয়ে দেওয়া হয় এবং ভবিষ্যতে অ্যাপ থেকে কোনও অনুরোধ করা হলে ব্যবহারকারীকে আবার অনুমোদন দিতে হয়। অ্যাপটি যদি কোনও নির্দিষ্ট অনুরোধ না করে, যেমন 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)
জাভা
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);