Wi-Fi STA/STA Eşzamanlılığı

Android 12, cihazların aynı anda iki Wi-Fi ağına bağlanmasına olanak tanıyan Wi-Fi STA/STA eşzamanlılığını sunar. Bu isteğe bağlı özellik aşağıdaki işlevleri etkinleştirir.

  • Kesilmeden önce yap : Cihaz, mevcut bağlantıyı kesmeden önce yeni bir Wi-Fi ağına bağlantı kurar. Bu, Wi-Fi ağları arasında geçiş yaparken daha yumuşak geçişler sağlar
  • Eşzamanlı yalnızca yerel ve internet bağlantısı : Cihaz, cihazın birincil internet sağlayan bağlantısını kesmeden yalnızca yerel bir ağa bağlanır.
  • Eşzamanlı kısıtlı ve internet bağlantısı : Cihaz, cihazın birincil internet sağlayan bağlantısını kesmeden kısıtlı bir ağa (yalnızca belirli ayrıcalıklı uygulamalarda mevcuttur) bağlanır.
  • (Android 13 veya üzeri) İnternet bağlantılı eşzamanlı birden fazla ağ : Cihaz, her ikisi de sınırsız olan ve tüm uygulamalar tarafından kullanılabilen iki ağa bağlanır ve internet bağlantısı sağlar.

Bu sayfada, bu özellik etkinleştirildiğinde cihazın davranışı ve cihaz üreticileri ve satıcıları için uygulama ayrıntıları açıklanmaktadır.

Uygulama

Wi-Fi STA/STA eşzamanlılığını uygulamak için cihazların aşağıdakileri desteklemesi gerekir:

  • Wi-Fi yongası veya ürün yazılımı iki eşzamanlı STA bağlantısını desteklemelidir. Firmware, her iki bağlantı için de tüm kanal ve bant kombinasyonlarını desteklemelidir. Performans sorunlarını önlemek için 2x2+2x2 DBS özellikli Wi-Fi çipi kullanmanızı öneririz.

  • Cihaz, IWifiChip AIDL veya HIDL uygulamasında aşağıdaki API'leri desteklemelidir.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • HAL Wi-Fi arayüz kombinasyonunun, [{STA} <= 2, ...] gibi bir spesifikasyon formatı kullanılarak kullanıma sunulan iki eşzamanlı STA arayüzüne sahip olması gerekir. Daha fazla bilgi için bkz. Wi-Fi çoklu arayüz eşzamanlılığı .

Bu ön koşullar karşılanırsa aşağıdakileri yaparak Wi-Fi STA/STA eşzamanlılığını uygulayın:

  1. Çalışma zamanı kaynak katmanlarını kullanarak bir veya daha fazla işlevi ayrı ayrı etkinleştirin (varsayılan olarak devre dışıdır).

    • Mola öncesi make : config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Eşzamanlı yalnızca yerel ve internet bağlantısı : config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Eşzamanlı kısıtlı ve internet bağlantısı : config_wifiMultiStaRestrictedConcurrencyEnabled
    • İnternet bağlantısıyla eşzamanlı birden fazla ağ : config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Her uygulamayı aşağıdaki ilgili bölümlerde açıklandığı şekilde doğrulayın.

Wi-Fi STA/STA eşzamanlılığını daha iyi desteklemek için OEM'e özel çerçevelerin ve uygulamaların, yalnızca tek bir ağ için WifiInfo döndüren ve Android 12'de kullanımdan kaldırılan WifiManager#getConnectionInfo() yerine NetworkCallback#onCapabilitiesChanged() yöntemini kullanmasını öneririz. Daha fazla bilgi için eşler arası bağlantı için Wi-Fi Ağ İsteği API'sine bakın.

Moladan önce yap

Mola öncesi make işlevi, cihazların mevcut Wi-Fi ağ bağlantısını korurken yeni bir Wi-Fi ağına bağlanmasına olanak tanır ve yalnızca yeni Wi-Fi ağına başarılı bir şekilde bağlandığında ve internet erişimine sahip olduğunda eski ağ bağlantısını keser.

Ara vermeden önce kesme kullanım durumu, Android 11 veya önceki sürümlerde, cihazın yeni bir ağa bağlanmadan önce mevcut Wi-Fi ağıyla bağlantısının kesilmesi gerektiği (kesmeden önce kesme) aşağıdaki sorunları giderir.

  • Yeni bir ağa bağlanırken cihaz, yanlış bir Wi-Fi şifresinin kaydedildiğini veya yeni ağın internet erişiminin olmadığını fark edebilir. Bu, cihazı eski ağa dönmeye zorlar ve Wi-Fi bağlantısı olmadan önemli miktarda süreye yol açar.

  • Eski ağın bağlantısı aniden kesilir, bu da tüm yuvaların kapanması anlamına gelir. Uygulamalar genellikle ani bir bağlantı kaybına iyi tepki vermez ve bu durum, kullanıcının yeni bağlantı tam olarak kurulana kadar birkaç saniye internet bağlantısı olmadan yaşamasına neden olabilir.

  • Varsayılan ağ, eski Wi-Fi ağından hücresel ağa, ardından hücresel ağdan yeni Wi-Fi ağına olmak üzere iki kez değişir. Bu, uygulamaların ağ değişikliklerine iki kez tepki vermesine neden olur. Cihazın ayrıca hücresel verileri kullanarak kısa bir süre harcaması gerekir.

Kesintiden önce yap akışı yalnızca işletim sistemi tarafından başlatılan otomatik Wi-Fi ağ anahtarları için kullanılır. Kullanıcı tarafından başlatılan ağ anahtarları, yeni ağ bağlanmadan önce önceki ağın bağlantısının tamamen kesildiği eski kesmeden önce kesme akışını kullanır. Bazı durumlarda, işletim sistemi tarafından başlatılan otomatik anahtarlarda bile, örneğin her ikisi de fabrika MAC adresini kullanacak şekilde yapılandırılmış iki ağ arasında geçiş yaparken, kapatmadan önce kesme akışı kullanılır.

Uygulamalar WifiManager#isMakeBeforeBreakWifiSwitchingSupported() API'sini kullanarak bu kullanım durumunun cihazda desteklenip desteklenmediğini kontrol edebilir.

Ara vermeden önce yapılan işlemin doğrulanması

Uygulamanızı doğrulamak için otomatik bir Wi-Fi ağ geçişini tetikleyin (şu anda bağlı olan ağdan daha güçlü bir sinyal gücüne sahip bir ağın mevcut olmasını sağlayarak) ve cihazın yeni ağa bağlanırken mevcut bağlantıyı koruduğunu doğrulayın. Her iki Wi-Fi arayüzünün durumunu görüntülemek ve her ikisinin de bağlı olduğunu doğrulamak için aşağıdaki komutu kullanın.

adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status

Yeni ağın bağlantısı yoksa cihaz, mevcut ağla bağlantıyı korurken ağa bağlanmayı dener ve yeni ağın internetinin olmadığını tespit ettiğinde bu girişimi iptal eder. Cihaz daha sonra mevcut bağlantıyı birincil Wi-Fi ağı olarak kullanmaya devam eder.

Eşzamanlı yalnızca yerel ve internet bağlantısı

Eşzamanlı yalnızca yerel ve internet bağlantısı işlevi, cihazların, birincil internet sağlayan ağ ile eşzamanlı olarak bir IoT cihazına bağlantı gibi yalnızca yerel bir bağlantıya bağlanmasına olanak tanır. Bu işlev, Android 10'da eklenen WifiNetworkSpecifier API aracılığıyla mümkün olan, kameralar gibi IoT cihazlarına doğrudan bağlanırken kullanıcı deneyimini iyileştirir.

Android 11 ve önceki sürümlerde, cihazların bir IoT cihazına bağlanırken birincil Wi-Fi ağıyla olan bağlantısı kesilir ve bu da internet bağlantısının kesilmesine neden olur (cihazda hücresel veri gibi başka bir aktarım türü olmadığı sürece).

Uygulamalar WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() API'sini kullanarak bu işlevin cihazda desteklenip desteklenmediğini kontrol edebilir.

Android 12'deki eşzamanlı yalnızca yerel ve internet bağlantısı işlevinde yapılan değişiklikler hakkında daha fazla bilgi için bkz . Eşler arası bağlantı için Wi-Fi Ağ İsteği API'si .

Yalnızca yerel ve internet bağlantısını doğrulama

Bu işlevi doğrulamak için aşağıdaki CTS ve ACTS testlerini kullanın:

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • EYLEMLER: WifiStaConcurrencyNetworkRequestTest

Eşzamanlı kısıtlı ve internet bağlantısı

Eşzamanlı kısıtlı ve internet bağlantısı işlevi, cihazın kullanıcı için birincil bir Wi-Fi ağına ve yalnızca belirli uygulamalar tarafından kullanılabilen sınırlı bir Wi-Fi ağına eşzamanlı olarak bağlanmasına olanak tanır.

Uygulamalar WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() API'sini kullanarak bu işlevin cihazda desteklenip desteklenmediğini kontrol edebilir.

Bir cihazın ikincil kısıtlı Wi-Fi ağlarına bağlanmasını sağlamak için şu adımları izleyin:

  1. setOemPaid veya setOemPrivate öğesini true olarak ayarlayarak Wi-Fi ağı önerileri ekleyin.

  2. ConnectivityManager ilgili yeteneklere sahip bir NetworkRequest dosyası oluşturun:

Cihaz, OEM ücretli veya OEM özel önerisiyle eşleşen bir ağ ile tarama sonuçlarını algıladığında, bu ağa otomatik olarak ikincil bir ağ olarak bağlanır.

Eşzamanlı kısıtlı ve internet bağlantısının doğrulanması

Bu işlevi doğrulamak için aşağıdaki CTS ve ACTS testlerini kullanın:

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • EYLEMLER: WifiStaConcurrencyNetworkRequestTest

İnternet bağlantısıyla eşzamanlı birden fazla ağ

Android 13 veya üzeri sürümlerde mevcut olan internet bağlantılı eşzamanlı birden fazla ağ özelliği, cihazın her ikisi de sınırsız olan (tüm uygulamaların erişimi vardır) ve internet erişimi sağlayan iki ağa (AP) eşzamanlı olarak bağlanmasına olanak tanır.

Uygulamalar WifiManager#isStaConcurrencyForMultiInternetSupported() yöntemini kullanarak bu özelliğin cihazda desteklenip desteklenmediğini kontrol edebilir.

Özellik destekleniyorsa ayrıcalıklı uygulamalar, WifiManager#setStaConcurrencyForMultiInternetMode(int mode) yöntemini kullanarak özelliği etkinleştirebilir. Özellik aşağıdaki modlara sahiptir:

Şu anda etkin olan özellik modunu sorgulamak için WifiManager#getStaConcurrencyForMultiInternetMode() yöntemini kullanın.

Özellik etkinleştirildiğinde, internet sağlayan ek bir Wi-Fi ağı istemek için aşağıdaki adımları kullanın.

  1. WifiNetworkSpecifier.Builder kullanarak bir Wi-Fi ağ belirticisi oluşturun. setBand() yöntemini kullanarak belirtici için bir bant seçin. Belirtilen bant için ek ağ Wi-Fi çerçevesi tarafından seçildiğinden SSID veya BSSID'yi belirtmeyin.

  2. ConnectivityManager kullanarak NET_CAPABILITY_INTERNET özelliğine sahip bir NetworkRequest oluşturun.

  3. İsteğin durumunu izlemek için belirticiyi bir NetworkCallback örneğiyle birlikte ağ isteğine ekleyin ve isteği ConnectivityManager gönderin. Tarama sonucunda istenen bantta kayıtlı bir ağ mevcutsa ve ağ bağlantısı başarılıysa, geri çağırma nesnesinde NetworkCallback.onAvailable() çağrılır.

İnternet bağlantısıyla eşzamanlı birden fazla ağı doğrulama

Bu işlevi doğrulamak için aşağıdaki CTS testini kullanın:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Satıcı Wi-Fi yongası yönergeleri

Wi-Fi yongası satıcıları, Wi-Fi STA/STA eşzamanlılığını desteklemek için aşağıdaki yönergeleri kullanın.

Wi-Fi yongası çift eşzamanlı STA bağlantılarını desteklemelidir. Bu, aşağıdakileri desteklediği anlamına gelir:

  • Her STA arayüzünün çerçeve tarafından programlanabilen benzersiz bir MAC'i vardır.
  • İkincil STA arayüzü dinamik olarak oluşturulabilir ve yok edilebilir.
  • Her STA farklı bir SSID'ye bağlanabilir (aynı bant içinde veya farklı bir bant içinde).
  • Her STA aynı SSID'ye bağlanabilir (aynı bant içinde veya farklı bir bant içinde). İki STA asla aynı BSSID'ye bağlanmamalıdır.

Kritik özellikler arayüz bazında çalışmalı ve birincil arayüzde mevcut olmalıdır. Aşağıda bu kritik özelliklerin bir listesi bulunmaktadır:

  • Dolaşım en azından birincil arayüzde desteklenmelidir ( IWifiChip.setMultiStaPrimaryConnection() kullanılarak ayarlanmalıdır). Dolaşım her iki arayüzde de destekleniyorsa, bir bağlantıdaki kararlar ikinci eşzamanlı bağlantıyla çakışmamalıdır. Örneğin, bir arayüz diğer bağlantının BSSID'sine gitmemelidir.

  • APF (ve ARP ve NS gibi diğer yük aktarımları) en azından birincil arayüzde desteklenmelidir ( IWifiChip.setMultiStaPrimaryConnection() kullanılarak ayarlanmalıdır).

  • Bağlantı katmanı istatistikleri arayüz bazında çalışmalıdır.

Farklı eşzamanlılık senaryoları için önerilen Wi-Fi çip uygulamaları aşağıdadır:

  • Wi-Fi yongası, çerçevenin geçerli işlevi belirtmek için aşağıdaki sabitlerden biriyle IWifiChip.setMultiStaUseCase() öğesini çağırmasına izin vermelidir:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY : Kırmadan Önce Yap işlevini belirtir. Birincil bağlantının kalitesine ikincil bağlantıya göre öncelik verilmelidir.
    • DUAL_STA_NON_TRANSIENT_UNBIASED : Eş zamanlı yalnızca yerel ve internet bağlantısını veya eşzamanlı kısıtlı ve internet bağlantısı işlevini belirtir. Her iki bağlantının kalitesine eşit şekilde öncelik verilmelidir.
  • Çift eşzamanlı STA'lar MCC, SCC ve DBS çalışma modlarına yol açabileceğinden, çerçeve işlevi belirtmek için IWifiChip.setMultiStaUseCase() öğesini çağırdığında satıcı uygulamasının en iyi radyo yapılandırmasını seçmesi gerekir. Aşağıdakiler genel yönergelerdir:

    • Varsa 2x2+2x2 DBS tercih edilir.
    • Bağlantı kalitesi üzerindeki aşırı etki nedeniyle mümkünse 1x1+1x1 DBS'den kaçının. Bunun yerine MM'yi tercih edin.
    • MCC görev döngüsü, çeşitli işlevler için sürücü veya ürün yazılımı tarafından yapılandırılabilir olmalıdır. Çerçeve, MCC görev döngüsünü doğrudan ayarlamaz ancak bu bilgiyi StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent kullanarak sorgular.
    • MCC kullanılıyorsa birincil ve ikincil bağlantılar arasında aşağıdaki görev döngülerinin uygulanmasını öneririz:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY : %70 birincil, %30 ikincil.
      • DUAL_STA_NON_TRANSIENT_UNBIASED : %50 birincil, %50 ikincil.