导航菜单

页面标题

页面副标题

Vi App v10.18.0 - AndroidNetworkConnectivityChecker.java 源代码

正在查看: Vi App v10.18.0 应用的 AndroidNetworkConnectivityChecker.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package com.amplitude.android.utilities;

import android.annotation.SuppressLint;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import com.amplitude.common.Logger;
import kotlin.ExceptionsKt;
import kotlin.jvm.internal.DefaultConstructorMarker;
import kotlin.jvm.internal.Intrinsics;
import org.jetbrains.annotations.NotNull;

public final class AndroidNetworkConnectivityChecker {

    @NotNull
    public static final Companion Companion = new Companion(null);

    @NotNull
    private final Context context;
    private final boolean hasPermission;
    private boolean isMarshmallowAndAbove;

    @NotNull
    private final Logger logger;

    public static final class Companion {
        private Companion() {
        }

        public Companion(DefaultConstructorMarker defaultConstructorMarker) {
            this();
        }
    }

    public AndroidNetworkConnectivityChecker(@NotNull Context context, @NotNull Logger logger) {
        Intrinsics.checkNotNullParameter(context, "context");
        Intrinsics.checkNotNullParameter(logger, "logger");
        this.context = context;
        this.logger = logger;
        this.isMarshmallowAndAbove = true;
        boolean hasPermission = hasPermission(context, "android.permission.ACCESS_NETWORK_STATE");
        this.hasPermission = hasPermission;
        if (hasPermission) {
            return;
        }
        logger.warn("No ACCESS_NETWORK_STATE permission, offline mode is not supported. To enable, add <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" /> to your AndroidManifest.xml. Learn more at https://www.docs.developers.amplitude.com/data/sdks/android-kotlin/#offline-mode");
    }

    private final boolean hasPermission(Context context, String str) {
        return context.checkCallingOrSelfPermission(str) == 0;
    }

    @SuppressLint({"MissingPermission", "NewApi"})
    public final boolean isConnected() {
        NetworkCapabilities networkCapabilities;
        if (!this.hasPermission) {
            return true;
        }
        try {
            Object systemService = this.context.getSystemService("connectivity");
            if (!(systemService instanceof ConnectivityManager)) {
                this.logger.debug("Service is not an instance of ConnectivityManager. Offline mode is not supported");
                return true;
            }
            if (!this.isMarshmallowAndAbove) {
                NetworkInfo activeNetworkInfo = ((ConnectivityManager) systemService).getActiveNetworkInfo();
                return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting();
            }
            Network activeNetwork = ((ConnectivityManager) systemService).getActiveNetwork();
            if (activeNetwork == null || (networkCapabilities = ((ConnectivityManager) systemService).getNetworkCapabilities(activeNetwork)) == null) {
                return false;
            }
            if (!networkCapabilities.hasTransport(1) && !networkCapabilities.hasTransport(0)) {
                return false;
            }
            return true;
        } catch (Throwable th) {
            this.logger.warn("Error checking network connectivity: " + th.getMessage());
            this.logger.warn(ExceptionsKt.stackTraceToString(th));
            return true;
        }
    }
}