检查android studio是否存在互联网连接不良

检查android studio是否存在互联网连接不良,android,Android,我正在我的应用程序中使用奖励广告视频。当没有互联网连接时,我使用此功能检查,不显示广告 public final boolean isInternetOn() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = conn

我正在我的应用程序中使用奖励广告视频。当没有互联网连接时,我使用此功能检查,不显示广告

public final boolean isInternetOn() {
    ConnectivityManager connectivityManager
            = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

但问题是,当连接不良时,显示广告会花费很多时间,而广告不会显示很多次。我想检查是否连接不良,如果连接不良,请不要显示广告,并显示连接不良警报。如何实现这一点?

您需要定义慢速网络的含义。我假设你所说的慢速网络是指2G3G网络。在这种情况下,您可以使用
NetworkInfo
类的
subType
来识别用户当前所在的网络类型,并执行相应的操作

例如,假设您认为2G速度较慢,您可以按如下方式识别2G网络

NetworkInfo network = connectivity.getActiveNetworkInfo();
int netSubType = network.getSubtypeName();
if(netSubType == TelephonyManager.NETWORK_TYPE_GPRS ||
    netSubType == TelephonyManager.NETWORK_TYPE_EDGE ||
    netSubType == TelephonyManager.NETWORK_TYPE_1xRTT) {
  //user is in slow network
}

有关此类常量值的更多信息,请参见类。

您可以通过Java线程基本细节构建一个简单的逻辑,例如,您将使用此可运行类来获取连接并计时:

public class CheckInternetActivity implements Runnable{


    public CheckInternetActivity() {

    }

    @Override
    public void run()  {
        System.out.println("Call...sleep....zzzzZZZZZ");
         try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
            System.out.println("Call...wake up!"); 
    } 
}
这是一种可能的basi main方法调用尝试:

ExecutorService executor=Executors.newSingleThreadExecutor()

因此,将所有内容包装在一个伪文件中:

public class CheckInternetActivity implements Runnable{

    private ConnectivityManager connectivityManager;
    private NetworkInfo activeNetworkInfo;

    public CheckInternetActivity(ConnectivityManager connectivityManager, NetworkInfo activeNetworkInfo ) {
        this.connectivityManager = connectivityManager;
        this.activeNetworkInfo = activeNetworkInfo;
    }

    @Override
    public void run()  {
        System.out.println("getting internet connection");
        ConnectivityManager connectivityManager
        = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
            System.out.println("Connected!"); 
    }


}
主要…:

ConnectivityManager connectivityManager;
NetworkInfo activeNetworkInfo;

ExecutorService executor = Executors.newSingleThreadExecutor();

executor.submit( new CheckInternetActivity(connectivityManager, activeNetworkInfo) );  
executor.shutdown();

System.out.println(executor.awaitTermination(4, TimeUnit.SECONDS));//this tells you how much did it takes...and let you do your move based on this output
if(activeNetworkInfo != null)
    System.out.println( "activeNetworkInfo--->" + activeNetworkInfo.isConnected());
else
    System.out.println( "activeNetworkInfo--->null!!");

让我知道它是否有帮助…

试试这个-OP一般要求互联网连接;这包括wifi。@ezio感谢您的回复!我增加了2G和3G的检查,但我有一个奇怪的问题。我的电话网络是TelephonyManager.network\u TYPE\u LTE,但仍然没有加载广告。我是否也应该使用4G添加更多检查?也许您可以尝试一下,我还建议您的广告服务系统没有返回任何错误remplace int netSubType=network.getsubsubtyName();to int netSubType=network.getSubtype();
ConnectivityManager connectivityManager;
NetworkInfo activeNetworkInfo;

ExecutorService executor = Executors.newSingleThreadExecutor();

executor.submit( new CheckInternetActivity(connectivityManager, activeNetworkInfo) );  
executor.shutdown();

System.out.println(executor.awaitTermination(4, TimeUnit.SECONDS));//this tells you how much did it takes...and let you do your move based on this output
if(activeNetworkInfo != null)
    System.out.println( "activeNetworkInfo--->" + activeNetworkInfo.isConnected());
else
    System.out.println( "activeNetworkInfo--->null!!");