Android 10 (API düzeyi 29) ve sonraki sürümleri çalıştıran cihazlarda, Chromecast ve Google Home donanımı gibi ikincil cihazlar için yapılandırmayı başlatmak üzere yeni bir eşler arası API kullanabilirsiniz. Bu özellik, uygulamanızın istenen ağın özelliklerini açıklamak için WifiNetworkSpecifier
kullanarak kullanıcıdan cihazın bağlı olduğu erişim noktasını değiştirmesini istemesini sağlar.
Bu API'yi kullanmak için aşağıdakileri yapın:
Şunu kullanarak bir kablosuz ağ tanımlayıcısı oluştur:
WifiNetworkSpecifier.Builder
.Bağlanılacak ağları ve gerekli ağları eşleştirecek bir ağ filtresi ayarlayın kimlik bilgileri.
SSID
, aşağıdakilerden oluşan bir kombinasyona karar verinSSID pattern
,BSSID
, veBSSID pattern
şuna tabi olarak her istekte ağ filtresini ayarlayın: koşullar:- 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 belirteci, ağ isteğine bir
NetworkCallback
örneğiyle birlikte ekleyin.Kullanıcı isteği kabul ederse ve ağ bağlantısı başarılı olursa geri arama nesnesinde
NetworkCallback.onAvailable()
çağrılır. Kullanıcı isteği reddederse veya ağ bağlantısı başarısız olursa geri çağırma nesnesindeNetworkCallback.onUnavailable()
çağrılır.
Bir eş cihaza bağlanma isteği başlatılırken Kullanıcı tarafından sağlanan bağlantı isteğini kabul edebileceği cihaz.
Kullanıcı onayı atlama
Kullanıcı, belirli bir uygulamadan gelen bir isteğe yanıt olarak bağlanılacak bir ağı onayladığında cihaz, söz konusu erişim noktası için onayı saklar. Uygulama, Söz konusu erişim noktasına tekrar bağlanırsanız 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 saklanan bu onay kaldırılır ve uygulamadan gelecek tüm istekler kullanıcı tarafından tekrar onaylanmalıdır. Uygulama özel olmayan bir istekte bulunduğunda (örneğin, SSID veya BSSID kalıbıyla) kullanıcısının isteği onaylaması gerekir.
Kod örneği
Aşağıdaki kod örneğinde, "test"
ön ekiyle başlayan bir SSID ve "10:03:23"
BSSID OUI içeren 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);