Android 10 (API düzeyi 29) ve sonraki sürümlerin yüklü olduğu cihazlarda, Chromecast ve Google Home donanımı gibi ikincil cihazların yapılandırmasını başlatmak için yeni bir eşler arası API kullanabilirsiniz. Bu özellik, uygulamanızın istenen bir ağın özelliklerini açıklamak için WifiNetworkSpecifier
kullanarak cihazın bağlı olduğu erişim noktasını değiştirmesini istemesine olanak tanır.
Bu API'yi kullanmak için aşağıdakileri yapın:
WifiNetworkSpecifier.Builder
kullanarak kablosuz ağ tanımlayıcısı oluşturun.Bağlanılacak ağları ve gerekli kimlik bilgilerini eşleştirmek için bir ağ filtresi ayarlayın.
Her istekte ağ filtresini ayarlamak için aşağıdaki koşullara tabi olarak
SSID
,SSID pattern
,BSSID
, veBSSID pattern
kombinasyonuna karar verin:- Her istekte
SSID
,SSID pattern
,BSSID
veyaBSSID pattern
özelliklerinden en az biri sağlanmalıdır. - Her istekte yalnızca
SSID
veyaSSID pattern
ayarlanabilir. - Her istekte yalnızca
BSSID
veyaBSSID pattern
ayarlanabilir.
- Her istekte
İsteğin durumunu izlemek için belirleyicileri ağ isteğine bir
NetworkCallback
örneğiyle birlikte ekleyin.Kullanıcı isteği kabul ederse ve ağa bağlantı başarılı olursa geri çağırma nesnesinde
NetworkCallback.onAvailable()
çağrılır. Kullanıcı isteği reddederse veya ağa bağlantı başarısız olursa geri çağırma nesnesindeNetworkCallback.onUnavailable()
çağrılır.
Eş cihaza bağlanma isteği başlatıldığında aynı cihazda bir iletişim kutusu açılır. Bu cihazın kullanıcısı, bağlantı isteğini bu iletişim kutusundan kabul edebilir.
Kullanıcı onayını atlama
Kullanıcı, belirli bir uygulamanın isteğine yanıt olarak bağlanılacak bir ağı onayladığında cihaz, belirli erişim noktası için onayı saklar. Uygulama, söz konusu erişim noktasına tekrar bağlanmak için belirli bir istekte bulunursa cihaz, kullanıcı onayı aşamasını atlar ve ağa otomatik olarak bağlanır. Kullanıcı, API tarafından istenen bir ağa bağlıyken ağı unutmayı seçerse uygulama ve ağ kombinasyonu için depolanan onay kaldırılır ve uygulamadan gelen tüm gelecekteki isteklerin kullanıcı tarafından tekrar onaylanması gerekir. Uygulama, SSID veya BSSID deseni gibi belirli olmayan bir istekte bulunursa kullanıcının isteği onaylaması gerekir.
Kod örneği
Aşağıdaki kod örneğinde, SSID öneki "test"
ve BSSID OUI'si "10:03:23"
olan açık bir ağa nasıl bağlanılacağı gösterilmektedir:
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);