Android 10 (API düzeyi 29) ve sonraki cihazlarda yeni bir eşler arası API kullanarak
Chromecast ve Google Home gibi ikincil cihazlar için önyükleme yapılandırması
donanım. Bu özellik, uygulamanızın kullanıcıdan erişimi değiştirmesini istemesini sağlar
cihazın bağlandığı noktanın
WifiNetworkSpecifier
kullanabilirsiniz.
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 en az bir
SSID
,SSID pattern
,BSSID
veyaBSSID pattern
- Her istekte yalnızca
SSID
veyaSSID pattern
ayarlanabilir - Her istekte yalnızca
BSSID
veyaBSSID pattern
ayarlanabilir
- Her istekte en az bir
Tanımlayıcıları, ağ isteğine
NetworkCallback
örnek olması gerekir.Kullanıcı isteği kabul ederse ve ağ bağlantısı başarılı,
NetworkCallback.onAvailable()
geri çağırma nesnesinde çağrılır. Kullanıcı isteği reddederse veya ağ bağlantısı başarısız olursa,NetworkCallback.onUnavailable()
geri çağırma nesnesinde ç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ını atlama
Kullanıcı, söz konusu uygulamaya özgü bir erişim noktası varsa cihaz, ilgili erişim noktasının onayını 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ı ağa bağlıyken bu depolanan veriler bu uygulama ve ağ kombinasyonu için onay kaldırıldığında ve gelecekte uygulamadan gelen istek kullanıcı tarafından tekrar onaylanmalıdır. Uygulama bir SSID veya BSSID kalıbı gibi belirli olmayan bir istekte bulunduğunda kullanıcısının isteği onaylaması gerekir.
Kod örneği
Aşağıdaki kod örneğinde, SSID ile açık bir ağa nasıl bağlanılacağı gösterilmektedir
"test"
öneki ve "10:03:23"
BSSID OUI hatası:
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);