Bağlantı Tanılama API'sı

Bağlantı Teşhis API'si, operatör uygulamaları, VPN uygulamaları ve Wi-Fi öneri uygulamaları gibi ağların sahibi olan veya bunları yöneten uygulamaların çerçeveden teşhis ağ bağlantısı bilgilerini almasına olanak tanır. Bu uygulamalar, sahip oldukları veya yönettikleri ağlar için geri aramaları kaydedebilir ve bağlantı bilgilerini içeren bildirimler alabilir. Uygulamalar, uygulamaya ait olmayan veya uygulamaya ait olmayan ağlara ilişkin bildirim almayacaktır.

Aşağıda ağları yöneten veya sahip olan uygulamalara örnekler verilmiştir:

  • Operatör uygulamaları: subId operatör ayrıcalıklarına sahip olduğu hücresel ağları yönetin
  • Wi-Fi öneri uygulamaları: Sisteme önerdikleri kendi Wi-Fi ağları
  • VPN uygulamaları: VPN'lerinin kullandığı tüm ağları yönetin, ancak yalnızca etkin VPN olduklarında

Geri aramalar aşağıdaki durumlarda çağrılır:

  • Ağ doğrulaması: Sistem belirli bir ağı değerlendirmeyi tamamladı. ConnectivityReport sınıfı, ağın geçerli durumu ve doğrulamanın bir parçası olarak gerçekleştirilen testlerin veya prosedürlerin sonuçları hakkında bilgi sağlar.

    public class ConnectivityReport {
        Network network;
        long reportTimestamp;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle additionalInfo;
    }
    
  • Veri duraklamasından şüpheleniliyor: IP paketlerinin ağ üzerinden düzgün şekilde akmadığı bir durum olan veri duraklamasından şüpheleniliyor. DataStallReport sınıfı şüpheli veri duraklamaları hakkında bilgi sağlar.

    public class DataStallReport {
        Network network;
        long reportTimestamp;
        int detectionMethod;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle stallDetails;
    }
    
  • Bağlantı bildirildi: Bir uygulama ConnectivityManager#reportNetworkConnectivity aracılığıyla sisteme bağlantı bildirdi. Ağ ve bildirilen bağlantı (uygulamanın ağın bağlantı sağladığına veya sağlamadığına inanıp inanmadığı) paylaşılır.

Uygulama

Connectivity Diagnostics API'yi kullanmak için bir uygulamanın platformdan bir ConnectivityDiagnosticsManager örneği alması gerekir. Bu örnek, ConnectivityDiagnosticsCallback uygulamalarını kaydetmek ve kayıtlarını kaldırmak için kullanılmalıdır. Geçersiz kılınmayan geri çağırma yöntemleri işlem dışıdır.

Aşağıda ConnectivityDiagnosticsCallback uygulamasının bir örneği verilmiştir:

public class ExampleCallback extends ConnectivityDiagnosticsCallback {
    @Override
    public void onConnectivityReportAvailable(@NonNull ConnectivityReport report) {
        ... 
        // Log data, take action based on report result, etc
        ... 
    }

    @Override
    public void onDataStallSuspected(@NonNull DataStallReport report) {
        ... 
        // Log data, take action based on report result, etc
        ... 
    }

    @Override
    public void onNetworkConnectivityReported(
               @NonNull Network network, boolean hasConnectivity) {
        ... 
        // Log data, take action based on report result, etc
        ... 
    }
}

Geri aramaları kaydetmek ve bildirimler almak için, registerConnectivityDiagnosticsCallback öğesini çağırın. Geri aramaların kaydını silmek ve bildirim almayı durdurmak için unregisterConnectivityDiagnosticsCallback öğesini çağırın.

Aşağıda ConnectivityDiagnosticsCallback kaydedilmesi ve kaydının silinmesi için bir örnek verilmiştir:

NetworkRequest request =
        new NetworkRequest.Builder()
                .addTransportType(TRANSPORT_CELLULAR)
                .build();
// Use an Executor that is appropriate for your use case
Executor executor = Executors.newSingleThreadExecutor();

ConnectivityDiagnosticsManager cdm =
        context.getSystemService(ConnectivityDiagnosticsManager.class);

ExampleCallback callback = new ExampleCallback();
cdm.registerConnectivityDiagnosticsCallback(
        request, executor, callback);

... 
// Collect connectivity information on networks that match with request
... 

cdm.unregisterConnectivityDiagnosticsCallback(callback);

Doğrulama

Connectivity Diagnostics API, ConnectivityDiagnosticsManagerTest tarafından CTS testine tabi tutulmuştur.